【问题标题】:Exercise 1-6: (page 17 K&R) - getchar() question练习 1-6:(第 17 页 K&R)- getchar() 问题
【发布时间】:2020-08-27 20:36:17
【问题描述】:

当我运行下面的程序时,输出第二个 1。我调试程序,但我不明白为什么编译器总是写第二个 1?

output like this.

#include <stdio.h>

main()
{
int c;

while (c = getchar() != EOF)
    printf("%d\n", c);
printf("%d - at EOF\n", c);
}

【问题讨论】:

  • 由于operator precedence,表达式c = getchar() != EOF实际上等于c = (getchar() != EOF)。也就是说,您将getchar() != EOF 的布尔值(01)结果分配给c。这是故意的吗?
  • 因为当您按 Enter 时,您的代码会读取另一个字符。尝试输入类似 'abc'
  • 感谢您的回答,您是对的@Oo.oO。我错过了 Enter。
  • 即使代码做了正确的事情,我建议您通过在条件周围显式使用括号来强调它。还请在问题本身中添加该程序试图解决的实际问题(因为准确理解您的问题至关重要)。问题应尽可能独立。
  • 您可能还想花一些时间阅读the help pages,阅读SO tour,阅读How to Ask,以及this question checklist。应该让你为下一个问题做好更好的准备。 :)

标签: c char getchar


【解决方案1】:

while 语句中的条件

while (c = getchar() != EOF)

等价于

while (c = ( getchar() != EOF) )

由于运算符优先级。如果输入没有被中断,这个逻辑表达式getchar() != EOF 总是产生1

你需要写

while ( ( c = getchar() ) != EOF)

【讨论】:

    【解决方案2】:

    您按下以将输入从终端“发送”到程序的 Enter 键作为换行符 '\n' 添加到输入缓冲区中,将在第二次迭代中读取循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多