scanf和printf的区别
来源: 作者:王教员 发布时间:2025-12-29 08:12:01 点击量:33
C 语言中scanf和printf的核心区别,从功能定位、数据流向、使用细节等多方面进行全面梳理,帮你清晰区分两者:
一、核心功能与数据流向(最本质区别)
函数 核心功能 数据流向 通俗理解
scanf 输入函数:从外部读取数据到程序内部的变量中 「外部设备(键盘 / 文件)→ 程序变量」 给程序 “喂” 数据,把外部输入的内容存到内存变量里
printf 输出函数:将程序内部的变量值、常量等展示到外部设备 「程序变量 / 常量 → 外部设备(屏幕 / 文件)」 把程序里的内容 “展示” 给用户看,输出到屏幕或保存到文件
二、格式控制符的使用差异
两者都需要格式控制符(如%d、%s等)匹配数据类型,但核心区别在于 scanf的格式控制符前需要加&(变量地址符,特殊情况除外),而printf不需要。
原因:scanf需要知道变量在内存中的地址,才能将读取的数据存入该变量;printf只需读取变量的值,直接传入变量名即可。
示例:
#include
int main() {
int a = 0;
// scanf:变量a前必须加&,获取变量地址
scanf("%d", &a);
// printf:直接传入变量a,无需加&
printf("你输入的数字是:%dn", a);
return 0;
}
特殊情况:scanf处理字符串数组(char arr[])时,无需加&,因为数组名本身就代表数组首元素的地址:
char name[20];
scanf("%s", name); // 正确,无需加&
printf("姓名:%sn", name);
三、参数性质差异
scanf的变量参数是 “输出型参数”(也叫传入地址型参数):函数需要通过地址修改外部变量的值,参数本质是内存地址。
printf的变量参数是 “输入型参数”(也叫传入值型参数):函数仅读取变量的值用于输出,不会修改外部变量,参数本质是变量的副本或常量值。
四、返回值含义不同
两者均有返回值,但含义完全不同,可用于判断函数执行是否成功:
scanf的返回值:
成功读取的 数据项个数(即匹配到的格式控制符数量)。
示例:scanf("%d %s", &a, name) 若成功读取一个整数和一个字符串,返回值为 2;若仅读取到整数,返回值为 1。
异常情况:遇到文件末尾(EOF)或输入格式不匹配时,返回EOF(通常是 - 1)。
printf的返回值:
成功输出的 字符总数(包括数字、字母、标点、换行符n等)。
示例:printf("Hellon") 的返回值是 6("Hello"5 个字符 +n1 个字符);printf("%d", 123) 的返回值是 3。
异常情况:输出失败时返回负数。
五、补充关键使用注意事项
scanf读取字符串时,会以 空格、制表符、换行符 作为分隔符,无法读取包含空格的字符串(如需读取,需使用scanf("%[^n]", arr)或fgets函数)。
printf支持格式化修饰(如%5d(右对齐占 5 位)、%.2f(保留 2 位小数)),scanf也支持部分格式修饰(如%3d(读取 3 位整数)),但使用场景更少。
两者的格式控制符必须与数据类型严格匹配,否则会导致数据读取错误(scanf)或输出乱码(printf)。
总结
对比维度 scanf printf
核心功能 数据输入(外部→程序) 数据输出(程序→外部)
数据流向 外部设备 → 程序变量 程序变量 / 常量 → 外部设备
格式控制符 变量前需加&(数组除外) 无需加&
参数性质 输出型参数(传入地址) 输入型参数(传入值)
返回值 成功读取的数据项个数(失败返回 EOF) 成功输出的字符总数(失败返回负数)
最新教员
李老师【机构家教】

擅长:雅思
毕业于新西兰怀卡托大学 本硕连读
2011-2019 年 7年多海外经历
2019 -2022前新东方英语老师 因为双减政策离职
主带:高中;雅思
擅长:高考提分;对于高考内容和做题套路非常熟悉,所带过的学生大多提分显著,只要态度没有问题,成绩大多可以获得突破。
最强战绩:2021年体育高考生,21天时间 从平时的40分达到高考的93分。
肖老师【大学生家教】

擅长:高三英语
为人真诚谦和,做事踏实负责。
关于教学能力 |
基础知识牢固,擅长方法技巧。教学严谨细心,善于因材施教。
数学长跑优胜者,基础稳固,能打题型;英语非常优异,语法阅读写作口语样样行,作文稳定23(满分25),高考听说14(满分15)。
1.带雅思听说读写,针对学员具体情况给出学习方案并督促。
2.帶香港學生數學,答疑解惑,並響應地複習知識點。
3.带5个小学霸,打CSSC剑桥英语辩论赛。
4.带数学、英语,从高一带至高二,树立数学信心,打牢基础,传授技巧,将学员数学成绩从70分拔高稳定至1
胡老师【大学生家教】

擅长:初三英语
我是首都师范大学英语师范专业的本硕连读学生。我对英语以及史地政三大文科有着浓厚的兴趣,未来想成为一名优秀教师。我初中的时候担任英语课代表,高中担任政治课代表,高考英语132,文综243,其中政治88 ,考研也顺利超过本校录取分数线15分。对于英语和史地政三大文科有着自己的一套独特的学习方法。以前在北京市第三十五中学实习,教初二英语,史地政三科也曾有过相关一对一家教的经历。
2018.9~2019.1,辅导高三学生英语,成绩从90分左右提高到120分以上。2019.3~2020.6,辅导初三学生政治,最终