Ĺadny brzuch
Mam taki kod:
#include <iostream> using namespace std; int main(int argc, char *argv[]) { Â Â cout << argv[1] << endl; Â Â if(argv[1] == "yes") Â Â cout << "Witam\n"; Â Â cout << "Witam ponownie\n\n"; Â Â system("PAUSE"); Â Â return EXIT_SUCCESS; }
program wywołuję z parametrem(argv[1]:"yes") i zamiast program wypisywać:
yes
Witam
Witam ponownie
to wypisuje tylko:
yes
Witam ponownie
co jest nie tak? :(
Użytkownik comp123 edytował ten post 29 grudzień 2005, 20:28
if(argv[1] == "yes")
Myślę, że problem jest w tej linii. Bo "yes" jes wskaźnikiem na char, a to jest zupełnie inny łańcuch, niż ten, który przekazujesz w wywołaniu. Co prawda oba mają tę samą wartość, ale rożne miejsca w pamięci. A Twoje if sprawdza tutaj i porównuje właśnie adresy, więc prawidłowo zwraca false. Powinieneś skorzystać z jakiejś funkcji porównywania stringów, zdaje się, że to jest cmpstr(), ale pewności nie mam, bo dawno nie używałem takiej funkcji. W każdym razie podsumowując: prównujesz wskaźniki, a nie stringi.
dzięki chodznik ta funkcja to dokładnie strcmp(). Poniżej podaję poprawny kod:
#include <iostream> using namespace std; int main(int argc, char *argv[]) { cout << argv[1] << endl; if(false == strcmp(argv[1], "yes")) cout << "Witam\n"; cout << "Witam ponownie\n\n"; system("PAUSE"); return EXIT_SUCCESS; }
dzięki chodznik ta funkcja to dokładnie strcmp(). Poniżej podaję poprawny kod:(...) No u mnie bez parametru się wykrzacza (prawidłowo :))#include <iostream> using namespace std; int main(int argc, char *argv[]) { if (argc>1) { cout << argv[1] << endl; if(!strcmp(argv[1], "yes")) cout << "Witam\n"; } cout << "Witam ponownie\n\n"; system("pause >nul"); // <- żeby nie pokazywało "naciśnij... ";) return 0; }
Użytkownik Cyrkiel edytował ten post 29 grudzień 2005, 22:14
no racja Cyrkiel, jak mogłem nie przewidzieć czegoś takiego, aż mi się wstyd przyznać :D
Użytkownik comp123 edytował ten post 29 grudzień 2005, 22:20
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
#include <iostream> using namespace std; int main(int argc, char *argv[]) { Â Â cout << argv[1] << endl; Â Â if(argv[1] == "yes") Â Â cout << "Witam\n"; Â Â cout << "Witam ponownie\n\n"; Â Â system("PAUSE"); Â Â return EXIT_SUCCESS; }
program wywołuję z parametrem(argv[1]:"yes") i zamiast program wypisywać:
yes
Witam
Witam ponownie
to wypisuje tylko:
yes
Witam ponownie
co jest nie tak? :(
Użytkownik comp123 edytował ten post 29 grudzień 2005, 20:28
if(argv[1] == "yes")
Myślę, że problem jest w tej linii. Bo "yes" jes wskaźnikiem na char, a to jest zupełnie inny łańcuch, niż ten, który przekazujesz w wywołaniu. Co prawda oba mają tę samą wartość, ale rożne miejsca w pamięci. A Twoje if sprawdza tutaj i porównuje właśnie adresy, więc prawidłowo zwraca false. Powinieneś skorzystać z jakiejś funkcji porównywania stringów, zdaje się, że to jest cmpstr(), ale pewności nie mam, bo dawno nie używałem takiej funkcji. W każdym razie podsumowując: prównujesz wskaźniki, a nie stringi.
dzięki chodznik ta funkcja to dokładnie strcmp(). Poniżej podaję poprawny kod:
#include <iostream> using namespace std; int main(int argc, char *argv[]) { cout << argv[1] << endl; if(false == strcmp(argv[1], "yes")) cout << "Witam\n"; cout << "Witam ponownie\n\n"; system("PAUSE"); return EXIT_SUCCESS; }
dzięki chodznik ta funkcja to dokładnie strcmp(). Poniżej podaję poprawny kod:(...) No u mnie bez parametru się wykrzacza (prawidłowo :))#include <iostream> using namespace std; int main(int argc, char *argv[]) { if (argc>1) { cout << argv[1] << endl; if(!strcmp(argv[1], "yes")) cout << "Witam\n"; } cout << "Witam ponownie\n\n"; system("pause >nul"); // <- żeby nie pokazywało "naciśnij... ";) return 0; }
Użytkownik Cyrkiel edytował ten post 29 grudzień 2005, 22:14
no racja Cyrkiel, jak mogłem nie przewidzieć czegoś takiego, aż mi się wstyd przyznać :D
Użytkownik comp123 edytował ten post 29 grudzień 2005, 22:20