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

Kod: Zaznacz cały

scanf("%s", &c);
zamień na:

Kod: Zaznacz cały

scanf("%c", &c);

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