我真的很确定如何解释这个问题,但我会试一试。
我的程序中有这行代码:
scanf (" %c", &character);
注意%c之前的空格。这应该保持scanf不将最后一个ENTER键解释为一个字符。这可行,但是在此行及其生成的printf输出之后,程序将不会继续执行,直到我提供另一个字符然后按ENTER键。之后它忽略所有scanf并在没有任何用户输入的情况下打印所有printf输出。那有意义吗。我是C新手,所以我确定我错过了一些简单但我找不到任何解决方案。
谢谢!
答案 0 :(得分:2)
标准输入被缓冲。
在刷新(标准输入)之前,您的代码将看不到缓冲区 当缓冲区已满或插入'\ n'(输入密钥)时会发生这种情况。
因为scanf()是阻塞I / O调用。应用程序将等待输入(无限期)。因此,使代码看起来已经停滞不前。
您不应该尝试解释代码前面部分中发生的事情。这会将您的代码耦合到您可能无法控制的其他输入。您的输入应该读取所需的一切,而不是更多。
例如:如果您要求用户输入字符,请按Enter键。您应该删除该字符,然后从输入流中输入。您不应期望流的下一个用户为您整理(或补偿您的代码)。
printf("Enter (Y/N)\n");
scanf("%c", &character);
scanf("%*[^\n]"); // Ignore everything to the end of line.
// Assuming you have told the user you will ignore
// extraneous characters. The next input should now
// expect only what they need.
答案 1 :(得分:0)
试试这个:
scanf ("\n%c", &character);
它应该“消耗”缓冲区中的\n
字符,然后等待新的字符。
答案 2 :(得分:0)
在之前的 scanf
来电中,使用scanf("%c\n", &character);
之类的内容来输入换行符。与下次需要输入时等待处理它相比,这通常不易出错。