我正在编写一个简单的代码,它从用户那里获取一个字符并打印出来,如果字符是q,那么循环就会中断。但我得到的输出打印两次打印声明,第二次打印没什么请看图像。为什么打印两次?
#include<stdio.h>
void main()
{
char c;
printf("Enter a character: ");
c=getchar();
while(c!='q')
{
putchar(c);
printf("\nEnter a character: ");
c=getchar();
}
}
答案 0 :(得分:3)
您正在按返回 / Enter 键作为输入的一部分。它保留在输入流中,并在下一次迭代中立即被getchar
选中。
如果格式化输入是一个选项,您可以在等待字符输入时使用scanf
跳过空格字符:
scanf(" %c", &c); // Note the leading white-space, it's what does the skipping
如果您做继续使用getchar
,请注意其返回类型,即int
。当输入流耗尽时,它返回EOF
,并且该值不是有效字符,而是整数。
答案 1 :(得分:2)
什么是缓冲? 临时存储区域称为缓冲区。所有标准输入和输出设备都包含输入和输出缓冲区。在标准C / C ++中,流被缓冲,例如在标准输入的情况下,当我们按下键盘上的键时,它不会发送到您的程序,而是由操作系统缓冲,直到时间被分配给程序
键入“while((getchar())!='\ n');”读取缓冲区字符直到结尾并丢弃它们(包括换行符)并使用它清除输入缓冲区并允许输入所需的容器
以下代码可以正常使用:
#include<stdlib.h>
void main()
{
char c;
printf("Enter a character: ");
c = getchar();
while(c != 'q')
{
putchar(c);
// flushes the standard input (clears the input buffer)
while ((getchar()) != '\n');
printf("\nEnter a character:");
c = getchar();
}
}