Piotreek Napisano Luty 27, 2011 Zgłoś Share Napisano Luty 27, 2011 Witam . Od niedawna uczę się C, i mam problem ponieważ działa mi wszystko ale z wywołaniem "Menu" coś mi się psuje , jakiś error , a konstrukcja wydaje mi się jest dobra. dziękuję . Pozdrawiam int main(int argc, char *argv[]) { menu(); [color="#FF0000"] //TU JEST BŁĄD[/color] if (WyborDrogi==1) { dodawanie(); } else if (WyborDrogi==2) { roznica(); } else if (WyborDrogi==3) { potega(); } else if (WyborDrogi==4) { ciag(); } system("PAUSE"); return 0; } int menu() { int WyborDrogi=0; printf("Program liczacy : \n"); printf("1.Dodawanie dwuch liczb \n"); printf("2.Odejmowanie dwuch liczb \n"); printf("3.Potegowanie wybranej liczby \n"); printf("4.Liczenie sumy ciagu liczb od 1 \n"); scanf("%d",&WyborDrogi); return WyborDrogi; } int roznica() { int a=0; int b=0; int wynik=0; printf("Licze roznice dwuch liczb a-b \n"); printf("Podaj pierwsza liczbe, a \n"); scanf("%d",&a); printf("Podaj druga liczbe, b \n"); scanf("%d",&b); wynik=a-b; printf("Wynik odejmowania %d - %d to %d \n",a,b,wynik); return wynik; } int dodawanie() { int a=0; int b=0; int wynik=0; printf("Licze sume dwuch liczb \n"); printf("Podaj pierwsza liczne \n"); scanf("%d",&a); printf("Podaj druga liczbe \n"); scanf("%d",&b); wynik=a+b; printf("Wynik dodawanie liczb %d i %d to %d \n",a,b,wynik); return wynik; } int potega() { int a=0; int b=0; int wynik=1; int i=0; printf("Liczenie potegi wybranej liczby \n"); printf("Podaj Podstawe \n"); scanf("%d",&a); printf("Podaj wykladnik \n"); scanf("%d",&b); do { wynik=wynik*a; i++; } while(i<b); printf("%d \n",wynik); return wynik; } int ciag() { int n=0; int suma=0; int i=1; printf("Liczenie ciagu liczb od 1 do n \n"); printf("Podaj n \n"); scanf("%d",&n); for (i=1;i<=n;i++) { suma=suma+i; printf("%d \n",suma); } return suma; } Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Luty 27, 2011 Zgłoś Share Napisano Luty 27, 2011 Jak piszesz program strukturalny i zadeklarujesz lokalną zmienną WyborDrogi wewnątrz funkcji menu, to nie możesz się do tej zmiennej odwołać w funkcji main. Musisz ją zadeklarować globalnie, przed obiema funkcjami, by móc się do tej zmiennej odwoływać z poziomu obydwu funkcji. Funkcja menu zwraca wybór drogi, ale Ty nie przypisujesz tej wartości do żadnej zmiennej lokalnej w funkcji main. Musiałbyś np. napisać int WyborDrogi = menu();, jeszcze też dobrze by było, aby funkcje, z których korzysta main() były zdefiniowane przed main'em, albo chociaż ich prototypy/zapowiedzi. Link do komentarza Udostępnij na innych stronach More sharing options...
DevPort Napisano Luty 28, 2011 Zgłoś Share Napisano Luty 28, 2011 Pierwsza zasada: Jeżeli coś programujesz i mieści się to w jednym pliku, staraj się aby funkcje które zostaną wykonane były przed funkcją w której będą one wykorzystane. Czyli to co Jason napisał: ...funkcje, z których korzysta main() były zdefiniowane przed main'em, albo chociaż ich prototypy/zapowiedzi. Druga zasada: Wyuczając w sobie od początku metody/sztuczki optymalizacji później będzie Ci łatwiej i szybciej tworzyć nowe programy. (Ja tu chyba nic nie zoptymalizowałem ) int roznica() { int a=0; int b=0; printf("Licze roznice dwuch liczb a-b \n"); printf("Podaj pierwsza liczbe, a \n"); scanf("%d",&a); printf("Podaj druga liczbe, b \n"); scanf("%d",&b); printf("Wynik odejmowania %d - %d to %d \n",a,b,(a-b)); } int dodawanie() { int a=0; int b=0; printf("Licze sume dwuch liczb \n"); printf("Podaj pierwsza liczne \n"); scanf("%d",&a); printf("Podaj druga liczbe \n"); scanf("%d",&b); printf("Wynik dodawanie liczb %d i %d to %d \n",a,b,(a+b)); } int potega() { int a=0; int b=0; int wynik=1; int i=0; printf("Liczenie potegi wybranej liczby \n"); printf("Podaj Podstawe \n"); scanf("%d",&a); printf("Podaj wykladnik \n"); scanf("%d",&b); do { wynik=wynik*a; i++; }while(i<b); printf("%d \n",wynik); } int ciag() { int n=0; int suma=0; int i=1; printf("Liczenie ciagu liczb od 1 do n \n"); printf("Podaj n \n"); scanf("%d",&n); for (i=1;i<=n;i++) { suma=suma+i; printf("%d \n",suma); } } int menu() { int WyborDrogi=0; printf("Program liczacy : \n"); printf("1.Dodawanie dwuch liczb \n"); printf("2.Odejmowanie dwuch liczb \n"); printf("3.Potegowanie wybranej liczby \n"); printf("4.Liczenie sumy ciagu liczb od 1 \n"); scanf("%d",&WyborDrogi); return WyborDrogi; } int main(int argc, char *argv[]) { //Nie ma potrzeby tworzenia zmiennej lokalnej jeżeli dana funkcja jest wykonywana 1 jedyny raz //Taka potrzeba byłaby gdyby struktura programu oparta była na If-ach ;] //Używając switch'a (przełacznik'a) wystarczy raz dać mu wartość, a on przełączy na odpowiednią funkcję switch(menu()) { case 1: dodawanie(); break; case 2: roznica(); break; case 3: potega(); break; case 4: ciag(); break; //Jezeli menu poda jakąś inną wartość niż liczby 1-4 to wykonywane jest zawsze to co kryje w sobie Default... ;] default: printf("coś innego"); break; } system("PAUSE"); return 0; } Na moje oko to powinno zadziałać głowy nie daję, bo z C mam do czynienia jedynie w programowaniu mikro kontrolerów. Ale w sumie to na tyle proste zadanie, że zabrałem głos w tym temacie i swoje 2 min. od siebie dałem. Pozdr. Prawdziwy programista wiesza sie wraz ze swoim programem. Link do komentarza Udostępnij na innych stronach More sharing options...
Piotreek Napisano Luty 28, 2011 Autor Zgłoś Share Napisano Luty 28, 2011 O dzięki wielkie ;] Kurcze muszę się jeszcze wiele nauczyć ;] Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.