Strona 1 z 1
C prosty kalkulator i nie działa
: 07 marca 2009, 10:50
autor: gummmibear
Kod: Zaznacz cały
#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?
: 07 marca 2009, 12:01
autor: tomii
: 07 marca 2009, 12:22
autor: brk16
Przepraszam, że nie poprawiam całości ale z tych istotniejszych rzeczy tak na szybko:
Kod: Zaznacz cały
#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");
}
: 07 marca 2009, 12:34
autor: tomii
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.
: 07 marca 2009, 12:47
autor: brk16
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.
: 07 marca 2009, 13:04
autor: tomii
Na początku jakoś mi to działało ale by segmentation fault
ale za to takie coś mi działa:
Kod: Zaznacz cały
#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.