Printf函数和Scanf函数的返回值

时间:2022-09-05 22:18:45

      要说起在C语言里面我们用的比较多函数是什么,可能有的人会说是main函数,确实是这样,一个函数里面不能没有主函数,而且只能有一个。其实除了主函数,还有最重要的两个函数那就是printf函数和scanf函数,这两个函数都是用来格式化输入输出数据的函数。但实际在编程里面我们要进行输入输出数据的话,可以通过函数的形参来进行传递数据,所以scanf函数的重要性就显得很低了,但是printf总是不能被替代的,所以printf函数就成了相对来说比较重要的函数。

       那我们就来说一下printf函数,我们知道一个函数最重要的就是形参和返回值。形参决定你传给这个函数什么值,而返回值决定了函数给你返回什么样的值。我们使用了一个函数,都是为了使用它的功能,形参和返回值非常重要。

       可能很多人按照常理会想了,printf函数的返回值不就是打印到屏幕上的值吗。并非是这样的。我们来看一道题,据说是腾讯的笔试题。

int fun (int a, int b, int c)
{   
     return 0;
}
int main()
{    
     return fun(printf("a"),printf("b"),printf("c"));
}

这道题问的是上述程序的输出结果,自以为printf调用成功返回0,而且参数传递顺序是栈式(先进后出,即调用顺序和参数顺序相反),所以输出结果为”cba”,没想到蒙对了答案,但是这么理解是错误的,错在对printf函数的返回值上。

我们来看一下测试printf函数返回值的结果:

#include <stdio.h>
int main()
{
    int v1=1;
    int v2=11;
    double v3=6.6;
    char v4='a';
    char *v5="wlk";
    int r1=printf("%d\n",v1);
    int r2=printf("%d\n",v2);
    int r3=printf("%f\n",v3);
    int r4=printf("%c\n",v4);
    int r5=printf("%s\n",v5);
    printf("%d,%d,%d,%d,%d\n",r1,r2,r3,r4,r5);
    return 0;
}
Printf函数和Scanf函数的返回值
由测试函数我们能看出来,当函数正常的时候返回的其输出的值,而当发生错误的时候,则会返回字符的个数。我们使用编译器的官方帮助手册,看到printf函数的说明:
Printf函数和Scanf函数的返回值

这就应证了我们所想的问题。