c - while 循环在使用 getchar() 和 putchar() 时打印同一语句两次

标签 c

我正在编写一个简单的代码,它从用户处获取一个字符并打印它,如果该字符是 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();
  } 
}

最佳答案

您正在按 Return/Enter 键作为输入的一部分。它保留在输入流中,并在下一次迭代中立即由 getchar 获取。

如果可以选择格式化输入,则可以使用 scanf 在等待字符输入时跳过空白字符:

scanf(" %c", &c); // Note the leading white-space, it's what does the skipping

如果您确实继续使用getchar,请注意它的返回类型,即int。当输入流耗尽时,它返回 EOF,并且该值不是有效字符,而是整数。

关于c - while 循环在使用 getchar() 和 putchar() 时打印同一语句两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42187699/

相关文章:

C不兼容指针错误

c - 音频生产者线程与 OSX AudioComponent 消费者线程和 C 中的回调

c - 是否可以将事件文件描述符与中断驱动输入结合使用?

c++ - 在哪里可以找到当前的 C 或 C++ 标准文档?

c - 如何在 C 中对二维数组使用 double for 循环?

java - H.323协议(protocol)端点到端点发送和接收什么来发起调用?

c - C 中的 fscanf 没有读取整行?

c - 在C中强制转换为指针类型时会发生什么情况?

c - 将未初始化的二维字符数组传递给函数

c++ - 想要将 "GdkPixbuf"转换为 "GtkSelectionData"对象