tomcio15 Napisano Grudzień 23, 2004 Zgłoszenie Share Napisano Grudzień 23, 2004 Uczę się języka C i swoje pierwsze programy pisze pod Linuksem Wszystko było dobrze do rozdziału "Przekazywanie parametrów do programu przez polecenie": #include <stdio.h> int main(int argc, char *argv[]) { printf("/*\nLiczba opcji: %d\nZmienna: %s\n*/\n", argc, argv[1]); switch (argv[1][1]) { case '?': printf("\nBrak pomocy.\n"); break; default: printf("\nNieznany błąd!\n"); break; } return 0; } A taki jest wynik wykonania programu: [tomcio@localhost 2]$ ./program ? /* Liczba opcji: 2 Zmienna: ? */ Nieznany błąd! [tomcio@localhost 2]$ Co jest z moim programem nie tak?! Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
lruman Napisano Grudzień 24, 2004 Zgłoszenie Share Napisano Grudzień 24, 2004 Wg mnie "nie trafiasz" w odpowiedni parametr. Drobna poprawka polegalaby na zmianie: switch (argv[1][1]) na switch (argv[1][0]) i u mnie wszystko dziala. Chyba zgodnie z Twoimi oczekiwaniami Z kolei ja mam pytanie, jak sobie radzicie z "brakiem (?)" w (_linuxie_ → Linuksie) ORT niektorych bibliotek. Zdaza sie czasami ze przeklejenie kodu programu spod windowsa powoduje blad cytuje z pamieci: nie moze otworzyc pliku xxx.h? Czy ktos zna odpowiedniki najpotrzebniejszych bibliotek? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
mike_j Napisano Grudzień 24, 2004 Zgłoszenie Share Napisano Grudzień 24, 2004 Jeśli chodzi Ci o to, że nie działa np. <stdio> albo <math> to dodaj literę c na początku nazwy, np. <cstdio>. Natomiast jeśli chodzi Ci o to, że nie ma np. <conio>, to niestety nic na to nie poradzisz... Lepiej użyć funkcji z innych bibliotek... Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
mynus Napisano Grudzień 24, 2004 Zgłoszenie Share Napisano Grudzień 24, 2004 -ciach- int main(int argc, char *argv[]) -ciach- switch (argv[1][1]) -ciach- 1. do switch przekazuje sie wartosci typu int a argv jest wskaznikiem do zmiennej typu char (wiec lepiej zrob najpierw rzutowanie, lub uzyj odpowiedniej funkcji do przeksztalcenia na typ int) 2. argv[1][1] ? troche glupie... argv[0] - nazwa programu argv[1] - pierwsza zmienna argv[2] - druga zmienna itd.... wiec jesli chcesz uruchamiac program np tak: program 10 (gdzie 10 to zmienna, to musisz argv[1] - rzutowac na typ int, ktorego wymaga switch ) taka jest konstrukcja jezyka Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
tomcio15 Napisano Grudzień 26, 2004 Autor Zgłoszenie Share Napisano Grudzień 26, 2004 aha, czyli swith nie współgra z typem char? ok, a mam jeszce takie pytanko: argv[0] to nazwa programu, a argv[1] to pierwsza opcja tal? i zrobiłem takie coś (to tylko wycinek z programu): /* uruchomiłem program poleceniem ./program abc */ printf("opcja pierwsza %s\n", argv[1]); char x = 'abc'; if(argv[1] == x) { printf("Działa"); } else { printf("Nie działa"); } A wynik działania wygląda tak: opcja pierwsza: abc Nie działa dlaczego (_niedziała_ → nie działa) ORT porówenacie łańcuchów w konstrukcji if? przecież obydwa mają typ char? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
mynus Napisano Grudzień 26, 2004 Zgłoszenie Share Napisano Grudzień 26, 2004 1. piszesz w C czy w C++? bo jesli w C to definicje powinny byc na samymn poczatku 2. ta konstrukcja jest zla: char x = 'abc'; bo typ char to jest pojedynczy znak, wiec jesli chcesz miec lanuch to tak: char *x="abc"; (wskaznikiem) albo tak: char x[]="abc"; (tablica) i cos takiego: char x[]="abc"; to nie jest to samo co: char x[]='abc'; (pierwsza tablica bedzie miec 4 elementy bo 4 jest znak '/0', a druga tablica 3 elementy bez znaku kopnca tablicy); 3. if(argv[1] == x) w Twoim programie, x jes typem char a argc jest wskaznikiem do typu char, wiec powinienes porownac to na co ten wskaznik wskazuje i pamietaj o zgodnosci porownywanych typow: char *x="abc"; ... if(*argv[1] == *x) ... 4. jesli nie chcesz stosowac wskaznikow, mozesz uzyc stringow (czyli tablicy znakowej char x[]="abc") do porownywania stringow nie uzywa sie takiego porownania == tylko funkcji strcmp z biblioteki string.h 5. PS dawno nic nie pisałem, ale int main(int argc, char *argv[]) czy przypadkiem nie powinno byc tak: int main(int argc, char **argv[]) ? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Sanczo Napisano Grudzień 26, 2004 Zgłoszenie Share Napisano Grudzień 26, 2004 Wszystko już napisał mynus, dodam tylko że char współgra ze switch tylko przechowywany typ musi sie zgadzać z przekazaną zawartością do zmiennej znakowej bądz tablicy string, zapis char x='abc' jest niedopuszczalny!! :shock: Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się