[C++] Konsola z argumentami


(Kamilmlody5) #1

Witam wszystkich.

Mam problem. Otóż chcialbym użyć argumentów w programie, lecz za bardzo nawet nie wiem jak sie za to zabrać. Szukałem na necie i raczej nie mam swej odpowiedzi. Kobinowałem z argv[] i niby działa, lecz nie potrafie użyć jej do if(...). Może ktoś napisać schemat napisania tego?

(...)

if (argv[1] = -k)

{

    std::cout << "uzyto parametru k" << std::endl;

}

if (argv[1] = -e jakis tekst)

{

    std::cout << "napisałeś: 'jakiś tekst' " << std::endl;

}

if (argv[1] = PUSTE)

{

   std::cout << "nie uzyles argumentu. Dostepne argumenty: -k -e 'txt'

}

Pisałem na szybko. Mam nadzieje ze zrozumiałe. Z góry thx za odpowiedzi.


(flaszer) #2
if(argc != 0 && argv[1] == "k") {

cout << "Uzyto argumentu: "<< argv[1] << endl;

} else {

cout << "Nie podano argumentow." << endl;

}

(matiit) #3

flaszer , Masz błąd, bo przecież przejdzie do else nawet jeśli podano argumenty, aczkolwiek inne niż "k"


(Kamilmlody5) #4

Chyba coś jest nie tak:

int _tmain(int argc, CHAR* argv[])

{

	//raport

	std::cout << "wpisano argument: " << argv[1] << std::endl;

	//raport

	if(argc != 0 && argv[1] == "s") 

	{

		std::cout << "Uzyto argumentu: "<< argv[1] << std::endl;

		getch();

	} 

	else {

		std::cout << "Nie podano argumentow." << std::endl;

		getch();

		}

}

Tylko czemu zawsze przechodzi do else. Odświeże może sobie o warunkach w C++. No ale powinno byc dobrze :/. Dobra. Doszedłem do takiego czegoś:

// Oxy.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"


int _tmain(int argc, char *argv[])

{

	std::string strNapis = "s";

	//raport

	std::cout << "wpisano argument: " << argv[1] << std::endl;

	//raport

	if(argv[1] == strNapis) 

	{

		std::cout << "Uzyto argumentu: "<< argv[1] << std::endl;

		getch();

	}

	else{ std::cout << "brak argumentu" << std::endl;}

}

Nie wydaje mi sie to dobrym rozwiązaniem. Może ma ktoś lepszy pomysł?


(Fiołek) #5

1) Porównywanie c-stringów(i wskaźników) się kłania :wink: Trzeba użyć strcmp albo std::string(albo coś innego, swojego np.).

2) Najlepszym rozwiązaniem jest parsowanie całego wywołania(zobacz: GetCommandLine), nie będziemy wtedy uzależnieni od pozycji parametru(co zachodzi w Twoim przypadku). Poszukaj w Google(lub na Stack Overflow).


(Kamilmlody5) #6

Ok. Poradziłem sobie sposobem std::string. Działa i mi to wystarcza :P. Thx za pomoc.