我尝试使用重复的循环在C中编写程序,直到从键盘输入特定字符。这是我的代码:
#include <stdio.h>
main ()
{
char option;
do
{
printf("Enter q to quit: ");
option = getchar ();
}
while (option != 'q');
}
我也尝试过scanf()但结果总是一样的。这是我尝试测试程序后的输出:
Enter q to quit: 3
Enter q to quit: Enter q to quit: 2
Enter q to quit: Enter q to quit: 1
Enter q to quit: Enter q to quit: q
有人可以向我解释为什么“输入q退出:”总是出现两次,我该如何解决?
答案 0 :(得分:3)
当你输入q时,你按q然后按回车(就C而言是一个新的行字符是\ n)。
所以当你的循环返回到开头时,&#39; \ n&#39;仍然在你的输入缓冲区中,并且getch()会自动读取它并检查是否等于q再次返回到循环的开头(因此你的文本看起来像是打印了两次)。
尝试使用这样的fgets:
fgets (option , 4 , stdin)
你必须确保你有一个足够大的字符数组来保存它,所以你应该定义
char option [3];
举行&#39; q&#39;,换行符&#39; \ n&#39;和终止字符&#39; \ 0&#39;;
fgets是一个非常好的解决方案,因为它只会存储第二个参数值,然后扔掉其余的。这意味着1)你没有溢出你的变量/数组和2)你没有在输入缓冲区中留下垃圾:)
答案 1 :(得分:3)
&#34;输入q退出:&#34;出现两次,因为输入缓冲区在第二次运行时仍然有新行字符。
修正:
#include <stdio.h>
int main ()
{
char option;
do
{
printf("Enter q to quit: ");
option = getchar ();
while(getchar() != '\n'); //Enter this line here.
}
while (option != 'q');
}
答案 2 :(得分:2)
您打印两次,因为当您按Enter键时,换行符\n
会附加到标准输入。
您可以通过添加额外的getchar来丢弃该换行符:
do
{
printf("Enter q to quit: ");
option = getchar();
getchar(); // discard line feed
}while (option != 'q');
答案 3 :(得分:1)
如果您点击两个键,则会读取两个字符。如果您想阅读字符,请致电getchar
。如果你想阅读行,请调用一些读取行的函数。
答案 4 :(得分:0)
getchar()函数首先从缓冲区读取。如果缓冲区为空,则它将从标准输入(即屏幕)读取。