【问题标题】:How compiler deals with `(c = getchar()) != EOF`? [duplicate]编译器如何处理 `(c = getchar()) != EOF`? [复制]
【发布时间】:2013-05-07 10:02:53
【问题描述】:

假设这个while循环:

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

如您所见,我们要将分配与EOF 进行比较,这是怎么发生的?据我所知,赋值不会返回任何值,因此您无法比较赋值(对吗?)

【问题讨论】:

  • 赋值通常返回值:您可以将其用于“a = b = c = 0;”或在您的示例中的条件...
  • 它是一个表达式,而不仅仅是 C 语言中的赋值。
  • 你需要习惯(子)表达式的副作用的概念。 c = getchar() 基本上是用户输入的内容; 副作用正在改变c的值。
  • (对吗?)错了!它确实返回一个值

标签: c if-statement


【解决方案1】:

赋值表达式返回赋值,在while ((c = getchar()) != EOF) 的情况下,您正在比较标准输入中的下一个字符getchar() 返回的内容- 这是分配的值)与EOF

【讨论】:

    【解决方案2】:

    每当我们调用 getchar() 时,它都会读取输入的下一个字符并将其返回给您。该函数返回一个 int,即相关字符的 ASCII 码,但如果需要,您可以将结果分配给 char 变量。 因此,通过这种方式,变量 c 得到的值最终与 EOF 进行比较。这个循环将一直运行,直到文件到达它的末尾。

    【讨论】:

      猜你喜欢
      • 2013-03-29
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多