gpt4 book ai didi

c - 为什么 printf ("%d\n"、 printf ("%d\b"、 a)) 以这种方式工作?

转载 作者:行者123 更新时间:2023-12-05 01:31:16 26 4
gpt4 key购买 nike

这是我的 C 代码,用 gcc 编译。

#include<stdio.h>

int main()
{
int a=1;
switch(a)
{
int x=10;
case 1:
printf("%d\n",printf("%d\b",x));
break;
default:
printf("%d\n",printf("%d\b",x));
}
return 0;
}

printf() 应该返回成功打印的元素数。printf("%d\b", x) 应该自己打印 10(因为\b 使打印指针落后一步(到 10 中的数字 0)并且没有什么可打印的在那之后。所以它应该刚刚打印了 10。也就是 2 个字符。现在外层 printf 会显示 2。输出应该是 102。我实际看到的输出是2。

如果是嵌套的 printf,打印指针的位置会被记住吗?我的意思是,如果 printf 里面有一个 \b ,它会使打印指针落后一步。当控件现在转到外部 printf 时,是否记住了那个改变的位置?它会覆盖最后一个字符吗?

最佳答案

printf("%d\b",x)

打印字符 '1''0'(因为 x==10)和 \b\b 是退格符;如果您打印到终端,它将打印 10,然后将光标移回一列。

调用 printf 返回它打印的字符数;在本例中,结果为 3(是的,'\b' 算作一个字符)。

printf("%d\n",printf("%d\b",x));

内部 printf 调用按照我上面的解释工作,并返回 3。外部 printf 调用打印 "3\n"

所以整个语句将打印:

10\b3\n

'\b' 导致 3 被屏幕上的 0 替换,所以最终显示的结果(当我运行我系统上的程序)是:

13

如果我通过 cat -v 管道输出,我得到:

10^H3

其中 ^H 代表退格符。

编辑:

问题刚刚被编辑,修改后的程序的行为有很大不同。 switch 语句导致控制跳转 past 声明 int x = 10;,但进入声明 x 的范围。因此,调用 printf 时,x 未初始化。这会导致未定义的行为,并且很可能导致垃圾输出(我刚刚得到 -1217572876^H12)。如果 x 恰好是 0,我想你会得到 0^H2,它看起来像 2 .

无论您想做什么,请找到更好的方法。

关于c - 为什么 printf ("%d\n"、 printf ("%d\b"、 a)) 以这种方式工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12638485/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com