C calc problem

fsakalos's Avatar, Join Date: May 2007
Go4Expert Member
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's Avatar, Join Date: Jul 2004
Go4Expert Founder
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's Avatar, Join Date: May 2007
Go4Expert Member
Do I need a special library for it, or stdio.h is enough?
DaWei's Avatar, Join Date: Dec 2006
Team Leader
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's Avatar, Join Date: May 2007
Go4Expert Member
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.
DaWei's Avatar, Join Date: Dec 2006
Team Leader
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's Avatar, Join Date: May 2007
Go4Expert Member
It doesn't work with rewind(stdin);
DaWei's Avatar, Join Date: Dec 2006
Team Leader
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's Avatar, Join Date: May 2007
Go4Expert Member
OK, thanks for help
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
Then does the fflush works