int OperateGumBallMachine(void){

	int total = 0;
	char input = getchar();

	RefillGumBallMachine();
	for(input; input != 'x'; input = getchar()){
		if(gMachine.iNumBlueGumBalls + gMachine.iNumGreenGumBalls + gMachine.iNumRedGumBalls == 0){
			RefillGumBallMachine();
		}
		switch(input){
			case 'n':
				total += NICKLE;
				if(total >= QUARTER){
					total -= QUARTER;
					DeliverGumBall();
					printf("Your change is %d cents\n", total);
					total = 0;
				}
			break;
			case 'd':
				total += DIME;
				if(total >= QUARTER){
					total -= QUARTER;
					DeliverGumBall();
					printf("Your change is %d cents\n", total);
					total = 0;
				}
			break;
			case 'q':
				total += QUARTER;
				if(total >= QUARTER){
					total -= QUARTER;
					DeliverGumBall();
					printf("Your change is %d cents\n", total);
					total = 0;
				}
			break;
			default:
				printf("Whoops you've entered the wrong command, please try again.");
			break;
		}
		printf("You've deposited %d cents\n", total);
	}

	return(0);
}

This is the function I am having trouble with. Every time I run my program, and enter a character, my program prints the correct output (for example if I enter 'n' the first time, my program outputs "you've deposited 5 cents"), but then it also outputs the default message every time ("Whoops you've entered the wrong command, please try again."). Why is it printing this?
If I put this statement before the switch statement:
printf("%d\n", input)
to see what input the switch statement is getting, it shows 'n' and then the rest of the output, followed by a blank line and the the default statement again, as though it is running through the switch statement a second time with nothing entered for the input variable.
If I remove the default case for the switch statement it prints "You've deposited 5 cents" two times.
What is wrong with my code? Please help.

Recommended Answers

All 4 Replies

input = getchar()

Might be causing the problem...!!!! ? Although i am not quite sure

Every time I run my program, and enter a character, my program prints the correct output (for example if I enter 'n' the first time, my program outputs "you've deposited 5 cents"), but then it also outputs the default message every time ("Whoops you've entered the wrong command, please try again."). Why is it printing this?

Look very closely at what keys you press when you enter a character. Say it's 'n' the first time. Don't you also hit the enter key? That's the character your program is reading the second time.

Okay.. that is your problem. It reads newline as second input after you enter 'n' and thus enters default . Maybe you could check for getchar() != EOF

EDIT : deceptikon and I posted at the same time :P :D

The simplest i can think is to include the below

for(input;input!='x';input=getchar()) {
    if (!isspace(input)){
       switch(input) {
        ......
        ......
       }
    } 
}
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.