C语言输入输出函数你不知道的那些事(scanf、printf等)

C语言输入输出函数你不知道的那些事(scanf、printf等) 目录前言scanfprintfgetcharfgets前言初学者在编写程序时经常使用scanf和printf但在实际应用中可能会遇到一些难以理解的问题。这是因为对这些函数的运行机制还不够熟悉。本文将详细解析常见输入输出函数的特点和工作原理。scanf原型int scanf(const char *format, ...);功能从标准输入通常是键盘读取格式化数据输入format--一个字符串指定输入数据的格式... --可变参数列表返回值成功--返回读取成功并赋值的输入项数量失败--EOF一般表示-1常见格式说明符%d读取有符号十进制整数。%u读取无符号十进制整数。%f读取浮点数。%c读取单个字符。%s读取字符串以空白字符分隔。%lf读取双精度浮点数用于double类型。特别注意事项scanf会跳过空白字符空格、制表符、换行符等但不会跳过非空白字符。使用%s时需注意缓冲区溢出风险建议指定最大宽度如%99s。读取字符串时scanf会在遇到空白字符时停止。printf原型int printf(const char *format, ...);功能格式化输出输入format--指向格式化字符串的指针用于指定输出的格式和内容。... -- 可变参数列表返回值成功--返回打印成功的字符数不包括字符串结尾的\0失败--EOF一般表示-1格式化字符串常见的占位符%d或%i输出有符号十进制整数。%u输出无符号十进制整数。%f输出浮点数默认 6 位小数%0.2f表示保留两位小数。%c输出单个字符。%s输出字符串。%x或%X输出十六进制整数小写或大写。%p输出指针地址。%%输出百分号%。示例#include stdio.h int main() { int num; float value; char str[100]; printf(Enter an integer, a float, and a string: \n); int result scanf(%d %f %s, num, value, str); if (result 3) { printf(Read: %d, %0.2f, %s\n, num, value, str); } else { printf(Input error.\n); } return 0; }输入100 10.2 sss输出Enter an integer, a float, and a string: Read: 100, 10.20, sssgetchar原型int getchar(void);功能从标准输入通常是键盘读取一个字符输入空输出成功--返回读取的字符转换为unsigned char后提升为int失败--EOF一般表示-1fgets原型char *fgets(char *str, int n, FILE *stream);功能从文件流中读取一行字符串输入str --指向字符数组的指针用于存储读取到的字符串n --指定读取的最大字符数包括结尾的空字符\0stream--指向文件流的指针通常是通过fopen打开的文件或标准输入stdin输出成功--返回str指针失败--NULL示例#include stdio.h int main() { char buffer[100]; while (fgets(buffer, sizeof(buffer), stdin) ! NULL) { printf(%s, buffer); } return 0; }输入qwer 1314输出qwer 1314特别注意在使用scanf后调用fgets时经常会出现问题原因在于scanf遇到空白字符就会停止读取导致输入缓冲区中残留空白字符。当后续调用fgets时会直接读取到这些残留字符造成意外的输入结果。解决方法是可以在scanf后立即调用getchar来清除缓冲区中的残留空白字符。示例... scanf(%s,str1) /*去除空白符*/ getchar(); /***********/ fgets(str2,len,stdin); ...更详细的内容可以看作者之前写的文章原理类似scanf接收异常及注意事项https://blog.csdn.net/weixin_58498967/article/details/144327901?spm1011.2415.3001.5331