Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   C calc problem (http://www.go4expert.com/forums/c-calc-problem-t4304/)

fsakalos 14May2007 22:03

C calc problem
 
Code:

#include <stdio.h>
int main()
{
int letter;
printf("Vyber si + alebo - alebo * alebo 2(druha mocnina): ");
letter = getchar();
        if(letter == '+'){
                float sucet, citatel, menovatel;
                        printf("Zadaj scitanec: ");
                        scanf("%g", &citatel);
                        printf("Zadaj scitanec: ");
                        scanf("%g", &menovatel);
                        sucet = citatel + menovatel;
                        printf("Vysledok je: %g\n", sucet);
                        return 0;
        }
        else if(letter == '-'){
                float rozdiel, odcitatel, odcitanec;
                        printf("Zadaj odcitatel: ");
                        scanf("%g", &odcitatel);
                        printf("Zadaj odcitanec: ");
                        scanf("%g", &odcitanec);
                        rozdiel = odcitatel - odcitanec;
                        printf("Vysledok je %g\n", rozdiel);
        return 0;
        }
        else if(letter == '*'){
                float nasobok1, nasobok2, sucin;
                        printf("Zadaj prvy nasobok: ");
                        scanf("%g", &nasobok1);
                        printf("Zadaj druhy nasobok: ");
                        scanf("%g", &nasobok2);
                        sucin = nasobok1 * nasobok2;
                        printf("Vysledok je %g\n", sucin);
        return 0;
        }
        else if(letter == '2'){
                int hovno;
                printf("Chcete vediet konkretnu mocninu(2) alebo tabulku od x po 100?(t) ");
                hovno = getchar();
                        if(hovno == 't'){
                                printf("\nsi pako\n");
                                return 0;
                        }
                        else if(hovno == '5'){
                                float mocnitel, vysledok;
                                printf("Zadaj mocnitel: ");
                                scanf("%g", &mocnitel);
                                vysledok = mocnitel * mocnitel;
                                printf("Vysledok je %g\n", vysledok);
                                return 0;
                        }

        return 0;
        }
        else {
                printf("Zadaj jeden zo znakov ktore su napisane vo vete!!\n");
               
       
        }


}

I'm writing this C calc and I wanted to do something like this: You get a possibility to select + or - or * or 2(power of 2). And then I started to write code that when you press 2, then you have posibillity to again select something. But this I cannot do(program doesn't give me any possibility and it just continue to printf). I've been looking over Internet but I cannot find anything about my problem. Red marked code is probably the problem

shabbir 14May2007 22:27

Re: C calc problem
 
You need to put the flushing statement before the getchar() I dont remember the exact name of the function but its probably is fflush(stdin);

fsakalos 14May2007 23:06

Re: C calc problem
 
Do I need a special library for it, or stdio.h is enough?

DaWei 14May2007 23:15

Re: C calc problem
 
fflush (stdin) will work with some compilers and not others. Use rewind (stdin). Stdio.h covers it.

You are courting more crashes and endless looping by using scanf without testing it's return. Check your scanf docs for how to check the return to see if you actually scanned AND CONVERTED all items which you requested.

fsakalos 14May2007 23:34

Re: C calc problem
 
I've solved the problem. Before hovno = getchar(); should be getchar(); so it should look like this:

getchar();
hovno = getchar();

But anyway thanks for help and sorry for duplication. :o

DaWei 15May2007 02:22

Re: C calc problem
 
That solution will work if there's only ONE extra char in the buffer. Your user (who may not be you) may pound a few extras in there. You want to get them all with rewind.

fsakalos 15May2007 17:03

Re: C calc problem
 
It doesn't work with rewind(stdin);

DaWei 15May2007 19:29

Re: C calc problem
 
My apologies, use what works, then. I'm going on the usual cause of failures because I can't actually read what the user is supposed to be doing.

fsakalos 15May2007 19:35

Re: C calc problem
 
OK, thanks for help

shabbir 15May2007 21:57

Re: C calc problem
 
Then does the fflush works


All times are GMT +5.5. The time now is 10:23.