kziel1 Opublikowano 4 Listopada 2008 Zgłoś Opublikowano 4 Listopada 2008 mam napisany i dzialajacy program, ale chcialbym z funkcji main wylaczyc jakas funkcje. probuje to zrobic, ale nic nie wychodzi. co jest nie tak w skladni? (program wyczytuje z argumentu liczbe i sumuje cyfry, gdzie s jest juz suma tych cyfr). int funkcja(char *argv[]); int main(int argc, char *argv[]) { ... s=funkcja(argv[1]); ... } int funkcja(char *argv[]) { int i,z; while(argv[1])/*petla na sumacje cyfr*/ { if(argv[1]>47&&argv[1]<58)/*sprawdzenie czy cyfra nie jest litera*/ { z+=argv[1]-48; ++i; } else { printf("miales podac liczbe idioto\n"); return EXIT_FAILURE; } } return z; } napisalem to wszystko w mainie i dzialalo ale jesli chce to rozbic na funkcje to nie chce dzialac. co tu jest zle (domyslam sie ze w argumentach w nawiasach dla funkcji)?? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 5 Listopada 2008 Zgłoś Opublikowano 5 Listopada 2008 gdybyś napisał jeszcze co nie wychodzi było by łatwiej szukać.. a gdybyś użył debugera, nie musiałbyś zakładać tego posta i zmuszać mnie i innych do debugowania kodu w pamięci ;) pierwszy błąd jaki popełniłeś, to brak sprawdzenia czy w ogóle jakikolwiek argument został podany.. Jeśli nie został to zaczynasz jazdę po pamięci bez trzymanki, co w najlepszym przypadku skończy się informacją, że program wykonał nieprawidłową operację :). Drugi błąd, jeśli dobrze obstawiam bo dawno nie babrałem się we wskaźnikach.. argv[1]. Zamiast tego robisz operator wyłuskania wartości ze wskaźnika, czyli *(argv). Twoje rozwiązanie być może by zadziałało, gdybyś pamietał o tym, że tablice w C++ zaczynają się od indeksu 0 a nie 1, zatem argv[0]. Być może się myle, ale dziś coś mój debuger nie chodzi za dobrze :wink: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kziel1 Opublikowano 5 Listopada 2008 Zgłoś Opublikowano 5 Listopada 2008 sprawdzanie bledow to mam wlasnie umieszczone w wielokropkach, ale to nieistotne w tu bylo. wiem ze argv od 0 liczy bo wlasnie chce zliczac drugi argument podany (to ze on istnieje jest juz sprawdzone). tylko nie ogarniam dokladnie roznicy miedzy *argv[] a argv[] i ktore powinienem wstawic w argumentach funkcji. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
cyc_ek Opublikowano 5 Listopada 2008 Zgłoś Opublikowano 5 Listopada 2008 1) argv[1] - to jest dobrze, argv[0] zawiera nazwę programu (pewnie jakieś program.exe czy coś) 2) jeżeli masz funkcja(char *argv[]) to powinieneś wywołać ją jako s= funkcja(argv), nie funkcja(argv[1]) 3) linia: int i,z; Cóż, zmienne i i z maja wartość nieznaną, winno być int i=0,z=0; 4) styl. eh.. niestety na to juz nie mam czasu Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 5 Listopada 2008 Zgłoś Opublikowano 5 Listopada 2008 No mówiłem... korzystanie z .NET'a niekorzystnie wpływa na pamięć o C :). Zresztą, jak coś piszę to sprawdzam to debugerem i tyle. Jeśli używasz IDE visual studio to możesz sobie włączyć przy breakpoincie okienko quick watch i tam wpisać sobie argv[], *argv[], argv[0] etc żeby zobaczyć co w tym siedzi... Może w innych IDE też da się to zrobić, tego nie wiem. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...