[英]What is the difference between printf to return?
计算两个给定 integer 值的总和。 如果两个值相同,则返回它们总和的三倍。
int main() {
printf("%d\n", test(1, 2));
printf("%d", test(2, 2));
}
int test(int x, int y) {
int sum;
if (x == y) {
sum = (x + y) * 3;
printf("sum = %d\n", sum);
} else {
sum = (x + y);
printf("sum = %d", sum);
}
}
当我运行这段代码时,我得到了错误的 output,但是当我使用return
语句而不是printf
时,我得到了正确的输入。 为什么?
由于test
不返回值(没有return
语句),因此尝试引用返回值会导致未定义的行为。 如果您进行一些小的修改,可能会更容易理解程序中发生的事情:
#include <stdio.h>
int
test(int x, int y)
{
int sum = x + y;
if( x==y ){
sum *= 3;
}
printf("sum = %d XXX ", sum);
return sum;
}
int
main(void)
{
printf("** %d **\n", test(1, 2));
printf("** %d **\n", test(2, 2));
return 0;
}
上述程序的output为:
sum = 3 XXX ** 3 **
sum = 12 XXX ** 12 **
在调用main
中的printf
之前调用main
中printf
的参数列表中的test
。 test
printf
中的 printf 执行并打印sum =... XXX
。 function 返回一个值,该值作为参数传递给 main 中的printf
,打印**... **
。
你的程序有点错误。 与您的代码的一般结构保持一致,您可以通过以下两种方式重写它。
#1: test
function 没有返回值,而是打印了一个值。 由于test
不返回值,因此必须在 function 名称之前放置关键字void
。 要获取要打印的值, main
function 必须调用test
function。
int main() {
/** calls the test function,
then the test function prints
the sum value **/
test(1,2);
test(2,2);
return 0;
}
void test(int x, int y) {
int sum;
if (x == y) {
sum = (x + y) * 3;
printf("sum = %d\n", sum); /** prints the sum value**/
} else {
sum = (x + y);
printf("sum = %d", sum); /** prints the sum value**/
}
}
#2 test
function 返回sum
值。 由于sum
是一个int
,您必须将关键字int
放在 function 名称之前。 main
function通过调用test
function得到sum
的值,然后main
打印这个值。
int main() {
/** prints the value returned
by the test function **/
printf("%d\n", test(1,2));
printf("%d", test(2,2));
return 0;
}
int test(int x, int y) {
int sum;
if (x == y) {
sum = (x + y) * 3;
} else {
sum = (x + y);
}
/** returns the value of sum **/
return sum;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.