Skocz do zawartości

[C] Proszę o pomoc w małym programiku


Piotreek

Polecane posty

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

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

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. :blink:

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 :o )

 

 
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ć :P 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 :P 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

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...