For 循环中的 Printf

问题描述 投票:0回答:4

这段 C 代码会打印什么?

for(printf(“1”);!printf(“0”);printf(“2”))
printf(“Sanchin”);
return 0;

我原以为这段代码会导致无限循环,但没有打印任何内容。 这段代码的结果应该是无限循环、1202Sanchin、10、0 甚至 1?

c loops for-loop return printf
4个回答
0
投票

for 循环可能会令人困惑,但将代码重写为 while 循环:

printf("1");
while(!printf("0")) {
    printf("Sanchin");
    printf("2");
}
return 0;

那就看手册

printf()
的返回值是多少:

成功返回后,这些函数返回的数量 打印的字符(不包括用于结束输出的空字节 字符串)。

因此,根据您的

stdout
的情况,它可能会打印:

  • 什么都没有(例如,如果
    stdout
    已关闭)
  • 1(例如,如果
    RLIMIT_FSIZE
    设置为 1)
  • 10(
    stdout
    没有限制)。

0
投票

printf
返回写入输出流的字符数(如果出现错误,则返回负值);成功时,
printf("1")
printf("0")
printf("2")
中的每一个都会返回
1
。 因此,您应该看到以下行为:

  • printf("1")
    被执行,其返回值被丢弃。
    1
    写入输出流。

  • printf("0")
    被执行,其返回值(
    1
    )是逻辑
    !
    运算符的操作数。
    0
    被写入输出流。 由于
    !1
    相当于
    0
    (false),因此循环立即退出而不执行循环体。 这意味着
    printf( "Sanchin" )
    printf( "2" )
    都不会被执行。

您没有得到任何输出,因为标准输出通常是行缓冲 - 在以下任一情况之前不会打印任何内容:

  • 缓冲区已满;或者,
  • 换行符 (
    '\n'
    ) 被写入流中;或者,
  • 使用
    fflush( stdout )
  • 手动刷新流

要查看输出,请将代码更改为:

for (printf("1"); !printf("0"); printf("2"))
  printf("Sanchin");
putchar( '\n' );
return 0;

输出将为

10


0
投票

您应该提供一个完整的示例来显示问题,而不是一段代码,如下所示:

for(printf(“1”);!printf(“0”);printf(“2”))
printf(“Sanchin”);
return 0;

几乎等同于以下内容:

    printf("1");
    while (!printf("0")) {
         printf("Sanchin");
         printf("2");
    }
    return 0;  /* return 0 is something that needs more context
                * to know what will happen next */

如您所见,这至少应该打印没有行尾的字符串

1
。 接下来是循环的测试,解释如下:
Printf()
返回打印的字符数,假设没有错误,printf将返回值1,经过运算符
!
逻辑非后,结果为一个 false 布尔值,这意味着循环体不被执行,所以只打印一个没有行尾的
1

您没有观察到任何内容的原因可能是多种原因之一,具体取决于您执行程序的环境,但最可能的原因是您的系统提示符在程序终止时覆盖了它。 改变一下就好了

printf("1");

printf("1\n");  /* add a line end to the output */

很可能你会看到单曲

1
出来。


0
投票

我们知道 printf 语句返回字符数 printf("1") return 1 然后我们进入条件语句 printf("0") 返回 1 但这里的语句是 (!printf("0")) !1=0 条件为假,我们退出 for 循环

© www.soinside.com 2019 - 2024. All rights reserved.