欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C/C++中printf()和scanf()函数的返回值

程序员文章站 2022-03-19 16:12:49
本部分来自博客:C语言中的scanf和printf函数的返回值问题(1)scanf函数原型:int scanf(const char *format, … );scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。其调用格式为: scanf("<格式化字符串>",<地址表>);函数 scanf() 是从 标准输入流 stdio 中读内容的通用 子程序 ,可以读入全部固有类型的数据并自动转换成机内形式。scanf函数返回值:scanf()函数返回....

本部分来自博客:C语言中的scanf和printf函数的返回值问题

(1)scanf函数原型:int scanf(const char *format, … );

scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。
其调用格式为: scanf("<格式化字符串>",<地址表>);

函数 scanf() 是从 标准输入流 stdio 中读内容的通用 子程序 ,可以读入全部固有类型的数据并自动转换成机内形式。

scanf函数返回值:
scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。

如:scanf("%d,%d", &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF。
且返回值为int型.

(2)printf函数原型及返回值:
printf 函数的一般形式为:int printf(const char *format,[argument]);
以上形式,我们在Visual C++里输入“printf”将会看到。
说明printf函数类型为整型,其返回值是整型值。

其值实际为printf控制输出的字符数。

printf()函数实际上是将所有参数按字符输出,根据该函数的参数1(const char *format),我们不难理解。

int a, b;
a = printf( "gelin\n" ); //a的值为6,
b = printf( "the value of printf is:%d", a ); //b的值为24
printf( "\n%d\n", b );
程序将输出:
gelin
the value of printf is:6
24

本部分来自例子1:

平时真不怎么关注printf的返回值,一般是直接调用printf格式化输出,今天做腾讯的笔试题发现了一个知识漏洞,特此记录。
首先,题目是这样的:

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

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

通过测试结果的规律,大胆的预测一下printf的返回值:
返回格式化数据替换后整个字符串的总字符个数。(\n为转义字符)


本部分来自例子2:

有一次在注册皮皮书屋的时候,要求输入的验证码是一段C程序的输出结果,主要是关于printf函数的,源程序如下:

#include <stdio.h>
 
int main()
{
 
int i=43;
 
printf("%d\n",printf("%d",printf("%d",i)));
 
return 0;
}

没有,这个程序的输出结果就是:4321

因为printf()函数的返回结果是一个int型的值,返回的是打出出来的字符数。所以:

第一个(最里面的)printf("%d",i)打印出的结果是:43

第二个printf("%d",printf("%d",i))打印出的结果是:2(因为43是两个字符)

第三个(最外面的)printf打印的结果是:1(因为2是一个字符)

根据结果输出顺序的先后,最后打印的结果是:4321

注意:经常在printf里出现的换行符“\n”也是一个字符。


本文地址:https://blog.csdn.net/qq_32642107/article/details/109305652

相关标签: C++