|
C prosty kalkulator i nie działa
gummmibear - 07-03-2009 10:50
#include <stdio.h>
main() { int a; int b; char c; int d; printf("Podaj a"); scanf("%d",&a); printf("Podaj b"); scanf("%d",&b); printf("Podaj rodzaj operacji +,-,*,/\n"); scanf("%s", &c); // printf("\n %d",a); switch(c) { case '1': { d=a+b; }break; case '*': { d=a*b; } break; case '/': { d=a/b; }break; case '+': { d=a+b; }break; case '-': { printf("Cos"); d=a-b; }break; default : printf("\n cos nie tak");
}
printf("\nWynik=%d", d); printf("\n"); }
Jeśli zmienię położenie wczytania znaku pomiędzy wczytanie liczb jest wszystko dobrze. Jeśli natomiast skompiluje to w takiej postaci wyświetla wartość zmiennej a.
Kompilator gcc.
Jakieś pomysły?
tomii - 07-03-2009 12:01
scanf("%s", &c);
zamień na:
scanf("%c", &c);
brk16 - 07-03-2009 12:22
Przepraszam, że nie poprawiam całości ale z tych istotniejszych rzeczy tak na szybko:
#include <stdio.h>
main() { float a; float b; char c; float d; printf("Podaj a"); scanf("%f",&a); printf("Podaj b"); scanf("%f",&b); printf("Podaj rodzaj operacji +,-,*,/\n"); scanf("%1s", &c); // printf("\n %d",a); switch(c) {
case '*': { d=a*b; } break;
case '/': { d=a/b; }break;
case '+': { d=a+b; }break;
case '-': { printf("Cos"); d=a-b; }break; default : printf("\n cos nie tak");
}
printf("\nWynik=%f", d); printf("\n");
}
tomii - 07-03-2009 12:34
Ok ale powiedz dlaczego wczytujesz char jako string, z tego co pamiętam, to w buforze nieraz mogą zostać śmieci. W wariancie jaki nie działa spróbuj wyświetlić to c jako char.
brk16 - 07-03-2009 12:47
Sprawdzałem jak się zachowuje w tym kodzie scanf("%c", &c); i przed podaniem znaku jeszcze wywala "cos nie tak" i kończy działanie. Dokładnie nie pamiętam jak to wyglądało w C gdyż nie piszę w nim od kilku lat, ale przy %1s wszystko działa jak powinno, przynajmniej u mnie.
tomii - 07-03-2009 13:04
Na początku jakoś mi to działało ale by segmentation fault ale za to takie coś mi działa: #include <stdio.h>
main() { float a; float b; char c; float d; printf("Podaj a"); scanf("%f",&a); printf("Podaj b"); scanf("%f",&b); printf("Podaj rodzaj operacji +,-,*,/\n"); //scanf("%1s", c); getchar(); c=getchar(); printf("\n %c",c); switch(c) {
case '*': { d=a*b; } break;
case '/': { d=a/b; }break;
case '+': { d=a+b; }break;
case '-': { printf("Cos"); d=a-b; }break; default : printf("\n cos nie tak");
}
printf("\nWynik=%f", d); printf("\n");
}
Więc coś zostaje chyba w buforze.
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|