繁体   English   中英

printf返回有什么区别?

[英]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之前调用mainprintf的参数列表中的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM