我是c编程的新手,我正在用我的程序面对这个问题 我有一个循环,从输入缓冲区
获取一个charwhile(c = getchar()){
if(c == '\n') break;
if(c == '1') Add();
if(c == '2') getInput(); // this is where the headache starts
....
}
这是getInput()函数
void getInput()
{
char ch = getchar();
if(ch == '1') doSomething();
....
}
但是当从getInput()函数调用getchar()时,它只获取最后一次调用getchar()时留在输入缓冲区中的字符。而我想要它做的是获得新输入的字符。
我一直在谷歌搜索两个小时,以一个体面的方式来清除输入缓冲区,但没有任何帮助。因此,非常感谢教程或文章或其他内容的链接,如果还有其他方法可以实现,请告诉我。
答案 0 :(得分:1)
这应该有效:(清除输入缓冲区的示例)
#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
*
*/
答案 1 :(得分:1)
首先,此代码中的==
条件中将存在=
比较运算符而不是if
赋值运算符。
while(c = getchar()){
if(c = '\n') break;
if(c = '1') Add();
if(c = '2') getInput(); // this is where the headache starts
....
}
对于停止输入,请尝试EOF
,键盘可以通过CTRL+D
给出。
编辑:问题在于\n
,当你按下键盘上的ENTER
键时,它实际上被视为输入。所以只需改变一行代码。
if (c ==
\ n ) break;
至if (c == EOF ) break;
正如我所说EOF
是投入的结束。
然后你的代码就可以了。
代码流程:
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.
但是按照我的说法更改代码后,这应该可行。
注意:为了理解代码流和出于调试目的,最佳做法是将printf()
放在函数的不同位置,并查看输出哪些行正在执行,哪些不执行。