[C] Switch (podstawy)

Mens
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 14 paź 2011, o 23:09
Płeć: Mężczyzna
Lokalizacja: Trn
Podziękował: 6 razy

[C] Switch (podstawy)

Post autor: Mens »

Witam. Dopiero uczę się programować w C, ale już mam mały problem. Uczę się z książki, i na końcu trafiłem na zadanie którego nie potrafie rozwiązać. Napisać program wprowadzający polecenia uzytkownika przy pomocy pętli z instrukcja switch. Niech nacisnięcie a powoduje przejscie do wprowadzenia zamawianej ilości arbuzów, b - zamawianej ilości buraków, c - cebuli. Wpisałem początkowy kod, jeszcze bez poprawek. Podejrzewam, że cały kod źle napisałem.

Kod: Zaznacz cały

#include <stdio.h>
main(){
int x, arbuz = 0, burak = 0, cebula = 0;
char z, a, b, c;
printf("Wcisnij litere a, b lub c albo # aby przerwac:\n");
scanf("%c", &z);
while((z = getchar()) != '#'){
switch(z){
case 'a': printf("Podaj liczbe arbuzow:\n");
scanf("Liczba arbuzow: %d", &arbuz);
break;

case 'b':  printf("Podaj liczbe burakow:\n");
scanf("Liczba burakow: %d", &burak);
printf("Ilosc burakow to %d\n", burak);
break;

case 'c':  printf("Podaj liczbe cebul:\n");
scanf("Liczba cebul: %d", &cebula);
printf("Ilosc cebul to %d\n", cebula);
break;
default : break;
}}}


wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[C] Switch (podstawy)

Post autor: wawek91 »

1) formatuj kod bo się go cholernie źle czyta
2) gdzie pytanie?
3) podejrzewasz, że kod jest źle napisany, czemu?
4) próbowałes kompilować i zobaczyć czy działa jak należy?
Mens
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 14 paź 2011, o 23:09
Płeć: Mężczyzna
Lokalizacja: Trn
Podziękował: 6 razy

[C] Switch (podstawy)

Post autor: Mens »

Kod: Zaznacz cały

#include <stdio.h>

main(){
  int x, arbuz = 0, burak = 0, cebula = 0;
  char z, a, b, c;

          printf("Wcisnij litere a, b lub c albo # aby przerwac:\n");
          scanf("%c", &z);
while((z = getchar()) != '#')
{
switch(z)
{
case 'a':  printf("Podaj liczbe arbuzow:\n");
           scanf("Liczba arbuzow: %d", &arbuz);
           break;

case 'b':  printf("Podaj liczbe burakow:\n");
           scanf("Liczba burakow: %d", &burak);
           printf("Ilosc burakow to %d\n", burak);
           break;

case 'c':  printf("Podaj liczbe cebul:\n");
           scanf("Liczba cebul: %d", &cebula);
           printf("Ilosc cebul to %d\n", cebula);
           break;
default :  break;
}}}

Program się kompiluje (code::blocks) ale nie działa tak jak powinien. Po włączeniu powinno wyświetlac pierwszy printf. Po wciśnięciu np a, powinno wyświetlać tekst z próśba o podanie liczbe arbuzów, a nie podaje. Po wciśnięciu np a, nie reaguje.
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[C] Switch (podstawy)

Post autor: wawek91 »

Nie jestem pewien, ale czy przypadkiem funkcja getchar() nie oczekuje na wciśnięcie jakiegoś klawisza? czyli w Twoim przykładzie np podasz literkę 'a' a on czeka dalej na ten znak więc wciśnij jeszcze raz 'a' i powiedz czy działa.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C] Switch (podstawy)

Post autor: Afish »

Wejście jest buforowane, każdy znak musisz potwierdzić klawiszem enter, co spowoduje wypchnięcie danych z bufora do programu.
ODPOWIEDZ