【问题标题】:Why this code returns Garbage value?为什么此代码返回垃圾值?
【发布时间】:2013-09-04 04:04:25
【问题描述】:

我的代码:

void main()
{
     while(1){
         if(printf("%d",printf("%d")))
             break;
         else
             continue;
     }
}

我知道printf()返回的是打印的字符数。那么,为什么上面的代码应该输出1时输出Garbage values。 请解释一下。

谢谢。

【问题讨论】:

  • 最左边的 printf 的第二个参数应该是一个数字。相反,您已将函数 printf 传递给它。这就像试图把小熊软糖放在你的油箱里让它运行一样。请阅读 printf 是什么:cplusplus.com/reference/cstdio/printf
  • 你熟悉printf的参数约定吗?如果是这样,一点点代码检查将解决您的问题。将它放在while 循环中的目的是什么?

标签: c printf conditional-statements


【解决方案1】:

因为第二个printf 缺少它应该打印的数字...

顺便说一句,不要指望只看到 1,您会看到第二个 printf 在此之前打印的数字。例如。如果你的代码是

printf("%d",printf("%d", 7));

你会看到 71;将打印前 7 个,然后打印 1 个。

【讨论】:

  • "你会看到之前第二个 printf 打印的数字。"那价值是多少?
  • 不会是422吧? printf 返回写入的字符数,因此 printf("%d", 42) 应该返回 2。
  • @NigelHarper,对,问题中是 1,但我想打印 42 并且没有停下来思考。修正了答案。
【解决方案2】:
printf("%d",printf("%d"))

等于

int i = printf("%d");
printf("%d",i);

但是,int i =printf("%d"); 行将打印一个垃圾值,因为您没有给它所需的值。

【讨论】:

    【解决方案3】:

    因为您没有为内部printf%d 提供参数

    检查:

    if(printf("%d",printf("%d ",3))),注意我在%d之后使用了一个空格

    现在你会看到

    3 2

    最后一个2,因为有多余的空间

    【讨论】:

    • 谢谢。但我仍然不明白为什么我的代码给出了垃圾值?
    • @user2708039 阅读我帖子的第一行 %dprintf 的格式说明符,它需要一个整数,因为你没有提供一个整数,你会得到未定义的行为
    猜你喜欢
    • 2014-06-06
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多