C/C++中printf()和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
下一篇: JAVA学生宿舍管理系统
推荐阅读
-
C++ 中exit(),_exit(),return,abort()函数的区别
-
c++中=和==的区别有哪些?
-
简单谈谈c/c++中#import、#include和@class的区别
-
C#中私有构造函数的特点和用途实例解析
-
简单谈谈c/c++中#import、#include和@class的区别
-
小计C++中的引用和vector
-
【C++常用函数】头文件
中的常用函数(绝对值,交换,比较) -
c++ 拷贝构造函数(重点在内含指针的浅拷贝和深拷贝)
-
OpenCV中的新函数connectedComponentsWithStats使用(python和c++实例)
-
C++学习笔记之调用构造函数和析构函数的顺序