Reputation: 546
I'm new to c programming and I'm facing this problem with my program
I have a loop that gets a char form the input buffer
while(c = getchar()){
if(c == '\n') break;
if(c == '1') Add();
if(c == '2') getInput(); // this is where the headache starts
....
}
here is the getInput() function
void getInput()
{
char ch = getchar();
if(ch == '1') doSomething();
....
}
but when calling getchar() from the getInput() function it only gets characters that were left in the input buffer from the last call of getchar(). and what i want it to do is to get newly typed characters.
I've been googling for two hours for a decent way to clear the input buffer but nothing helped. So a link to a tutorial or an article or something is very appreciated and if there's another way to implement this then please tell me.
Upvotes: 4
Views: 9289
Reputation: 9204
First of all there will be ==
comparison operator rather than =
assignment operator in the if
condition in this code.
while(c = getchar()){
if(c = '\n') break;
if(c = '1') Add();
if(c = '2') getInput(); // this is where the headache starts
....
}
And for stop taking input try EOF
which from keyboard can be given by prssing CTRL+D
.
EDIT : The problem is with the \n
which is actually taken as input when you press ENTER
key on the key board. So change just one line of code.
if (c ==
\n) break;
to if (c == EOF ) break;
and as I said EOF
is the end of input.
Then your code will work fine.
Flow of code :
step 1: suppose `2` is input
step 2: getInput() is called
step 3: suppose `1` as input // in getInput
step 4: doSomething() is called // from getInput
step 5: After completion of doSomething again come back to while loop ,
but in your case you have already given `\n` character as an input
when you pressed `1` and `ENTER`.And thus loop terminates.
but after changing the code as I said , this should work.
NOTE: To understand code flow and for debugging purposes it's best practice to put printf()
in various places in functions and see the output as which lines are executing and which are not.
Upvotes: 1
Reputation: 9040
This should work: (Example of clearing input buffer)
#include <stdio.h>
int main(void)
{
int ch;
char buf[BUFSIZ];
puts("Flushing input");
while ((ch = getchar()) != '\n' && ch != EOF);
printf ("Enter some text: ");
if (fgets(buf, sizeof(buf), stdin))
{
printf ("You entered: %s", buf);
}
return 0;
}
/*
* Program output:
*
Flushing input
blah blah blah blah
Enter some text: hello there
You entered: hello there
*
*/
Upvotes: 1