繁体   English   中英

为什么printf给我下面的output?

[英]Why does printf give me the following output?

我正在阅读C 编程语言书,并了解如果我有一行代码,例如:

int c;
printf("%d", c = 5);

我将得到一个 5 的 output,因为 (c = 5) 具有赋值的 RHS 值。

以类似的方式:

int c;
printf("%d", c = getchar(c));

会给我标准输入缓冲区中第一个字符的 integer 值,因为 (c = getchar()) 具有 RHS 的值,即 getchar() function。

我正在玩它并使用 VS Code 使用以下内容:

#include <stdio.h>

int main()
{
    int c, b;
    printf("%d\t%d", c = (b = 7));
}

我得到的 output 是:

7 6422376。

并不是

7 7

为什么是这样? 无论我对 b 使用什么值,例如 (b = 3),第二个 output 都是相同的值 (6422376)。

表达式c = (b = 7)单个表达式,因此将单个参数传递给printf function。

第二个%d格式说明符导致未定义的行为,因为没有第二个参数匹配它。

因为对于第二个 %d 没有匹配的参数,因为 c=(b=7) 是单个表达式

您的代码格式不正确:当您应该有两个时,您只有一个 printf 参数。

#include <stdio.h>

int main()
{
    int c, b;
    printf("%d\t%d", c = (b = 7),b);
}

您可以尝试这些代码来打印 b 的值。 printf function 中只有一个参数和 2 个格式说明符,因此编译器假定另一个 %d 的任何垃圾值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM