Skocz do zawartości
kziel1

Wkurzajace Argv

Rekomendowane odpowiedzi

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)??

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...