[英]“Enter a character to quit” program in C
我尝试使用循环编写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
谁能向我解释为什么“ Enter q to quit:”总是出现两次,我该如何解决?
输入q时,按q,然后按Enter(就C而言,一个新的换行字符为\\ n)。
因此,当循环返回到开头时,'\\ n'仍在输入缓冲区中,并且getch()自动读取此值并检查其是否等于q,然后再次返回到循环的开头(因此,文本看起来像打印了两次)。
尝试使用如下fgets: fgets (option , 4 , stdin)
您必须确保有足够大的字符数组来容纳它,因此您应该定义char option [3];
保留“ q”,换行符“ \\ n”和终止符“ \\ 0”;
fgets是一个很好的解决方案,因为它只会存储第二个参数值的字符,而丢弃其余的字符。 这意味着1)您不会溢出变量/数组,并且2)输入缓冲区中不会剩下垃圾:)
“ Enter q to quit:”出现两次,因为您的输入缓冲区在第二次运行时仍包含换行符。
固定:
#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');
}
之所以将它打印两次,是因为在您按Enter键时,在标准输入后面附加了换行符\\n
。
您可以通过添加额外的getchar来放弃该换行符:
do
{
printf("Enter q to quit: ");
option = getchar();
getchar(); // discard line feed
}while (option != 'q');
如果您按下两个键,您将读取两个字符。 如果要阅读字符 ,请致电getchar
。 如果要读取行 ,请调用一些读取行的函数。
getchar()函数首先从缓冲区读取。如果缓冲区为空,则从标准输入(即屏幕)读取。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.