ďťż

Ł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
  •