它如何为下面的代码提供恒定输出?

时间:2014-07-03 12:48:29

标签: c pointers printf

#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

我想知道它是如何为输入的任何数字提供相同的输出。我是新用户,对不起,如果我错了。谢谢。

2 个答案:

答案 0 :(得分:6)

此代码与

相同
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个变量,如果成功。

然后打印字符串&#34; PRINT 2 \ t&#34;。

printf返回写入的字符数,在这种情况下为8。

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

答案 1 :(得分:3)

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

  

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

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

  

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

     

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

因此,详细阐述了陈述printf("%d",printf("PRINT %d\t",scanf("%d %d",&i,&a)))

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

  • 然后您的内部printf将成为printf("PRINT %d\t", 2),并会写出 8个字符 PRINT 2\t,因此会返回8

  • 然后您的外printf将成为printf("%d", 8)并写8,使您的合并输出PRINT 2 8