请帮我输出这个程序。为什么它会显示结果 o/p PRINT 2 8用于输入3 4
我认为输出可能因机器不同而不同,但这是怎么回事。嵌套printf和scanf在C中的输出
#include<stdio.h>
int main() {
int i,a;
printf("%d",printf("PRINT %d\t",scanf("%d%d,",&i,&a)));
return 1;
}
请帮我输出这个程序。为什么它会显示结果 o/p PRINT 2 8用于输入3 4
我认为输出可能因机器不同而不同,但这是怎么回事。嵌套printf和scanf在C中的输出
#include<stdio.h>
int main() {
int i,a;
printf("%d",printf("PRINT %d\t",scanf("%d%d,",&i,&a)));
return 1;
}
我想你缺的是,你有嵌套函数一行调用是因为这个代码基本上相同:
int scanf_result = scanf("%d%d,",&i,&a);
int printf_result = printf("PRINT %d\t", scanf_result));
printf("%d", printf_result);
scanf
调用应该返回2,如果你输入的有效输入,而且还可以返回-1对于实际的错误,或者如果它未能扫描2个整数,则为0或1。然后按照您的预期打印第一个printf
,并且它应该返回8(或者如果scanf
返回-1,则返回9),因此7可能意味着您实际执行的代码与粘贴的代码之间存在差异...然后第二个printf
在同一行上打印该数字(不在任何地方打印新行),从而为您提供最终输出。
没有歧义,编译器不能以不同的顺序在这里做事。将函数的返回值作为参数传递给另一个函数时,必须首先调用第一个函数以获取返回值。因此,从标准输入或打印到标准输出的任何“副作用”也按照该顺序进行。
您可以获得ambiquity的方式是在同一个参数列表中的相同变量上多次使用赋值运算符或++
或--
运算符。然后,当变量值实际发生更改时,它是未定义的,因此当您在同一个参数列表中多次使用同一个变量时,哪些值会被传递。
printf()
立即执行输出。它不会“返回”你刚刚打印的字符串。它会返回输出多少个字符(您的7
)。如果要将内部打印件送入外部打印件,则需要使用sprintf()
。 “String printf”。
任何优秀的C参考文档(例如Linux printf
和scanf
手册页)都会记录标准函数的返回值,例如这些参数将解释打印返回值时会看到的内容。
在这种特定情况下,scanf
的返回值是成功匹配的输入项的数量。每个“输入项目”对应于scanf
字符串中的%
模式,因此在这种情况下,如果scanf
对两种模式都有有效输入,则它将返回2。然后,printf
返回它输出的字符数。 (在这种情况下,报告的输出是令人惊讶的,因为我希望8:strlen("PRINT ") == 6
,加上为scanf
返回一个字符加一多为标签)
我看不出为什么无论这些值会从改变系统到系统,但当然如果scanf
不能匹配它的两个输入项目,它将会改变。