【问题标题】:How does it gives constant output for the code below?它如何为下面的代码提供恒定的输出?
【发布时间】:2014-07-03 12:48:29
【问题描述】:
#include <cstdio>

using namespace std;

int main() 
{
        int i,a;
        printf("%d",printf("PRINT %d\t",scanf("%d %d",&i,&a)));
        return 0; 

}

这段代码给出了输出

PRINT 2 8

我想知道它如何为输入的任何数字提供相同的输出。我是新用户,如果我在某个地方错了,我很抱歉。谢谢。

【问题讨论】:

  • 你在哪里声明了ia
  • 我认为它甚至不会编译,因为 ia 没有定义。
  • 当您解决未声明变量的问题时,请阅读 scanfprintf 并查看它们返回的内容。
  • 它编译并给出输出“PRINT 2 8”
  • 我又编辑了一遍,忘记初始化了。

标签: c pointers printf


【解决方案1】:

此代码与

相同
int main() 
{
        int i,a;
        int p, s;
        s = scanf("%d %d",&i,&a);
        p = printf("PRINT %d\t",s)
        printf("%d", p);
        return 0; 

}

scanf 返回分配的项目数。在你的情况下 2 个变量,如果成功的话。

然后打印字符串“PRINT 2\t”。

printf 返回写入的字符数,在本例中为 8。

然后你打印那个数字,8。这意味着你的程序的所有输出都是“PRINT 2\t8”

【讨论】:

  • 非常感谢您的详细说明
【解决方案2】:

scanf 返回成功读取的项目数(在本例中为 2)。

成功时,函数返回参数的项目数 列表已成功填写。

printf 返回成功打印的字符数(在这种情况下,内部 printf 返回8)。

成功时,返回写入的字符总数。

如果发生写入错误,则设置错误指示符 (ferror) 并 返回负数。

因此,详细说明printf("%d",printf("PRINT %d\t",scanf("%d %d",&amp;i,&amp;a)))

  • 您最里面的scanf 将返回2,因为它读取2 个整数。

  • 那么你内心的printf会变成printf("PRINT %d\t", 2)并且会写8个字符 PRINT 2\t,因此返回8

  • 那么你的外部printf会变成printf("%d", 8)并写成8,使你的组合输出PRINT 2 8

【讨论】:

  • 请详细说明 John Bupit。我对编程有点陌生。
  • 非常感谢 John Bupit 的详细说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
相关资源
最近更新 更多