1. C语言输入输出函数概述
在C语言编程中,输入输出(I/O)函数是与用户交互的桥梁。作为一门系统级编程语言,C没有内置的I/O功能,而是通过标准库<stdio.h>提供了一系列强大的函数。这些函数可以分为三大类:控制台I/O、文件I/O和字符串I/O。
初学者常犯的错误是认为printf()和scanf()就是C语言的全部I/O功能。实际上,标准库提供了十几种不同的I/O函数,每种都有特定的使用场景和性能特点。比如,getchar()和putchar()虽然简单,但在处理字符流时效率极高;而fgets()和fputs()则是处理文本行的首选工具。
注意:所有I/O函数在使用前都必须包含<stdio.h>头文件,否则编译器会报错。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 标准输入输出函数详解
2.1 格式化输出函数printf()
printf()是C语言中最常用的输出函数,其原型为:
c复制int printf(const char *format, ...);
这个函数的核心在于格式字符串(format string),它包含普通字符和格式说明符。格式说明符以%开头,如%d表示整数,%f表示浮点数,%s表示字符串等。
常见格式说明符包括:
- %d:十进制有符号整数
- %u:十进制无符号整数
- %f:十进制浮点数
- %c:单个字符
- %s:字符串
- %p:指针地址
- %x:十六进制无符号整数
printf()的返回值是成功输出的字符数,如果出错则返回负值。这个返回值在实际编程中很少使用,但在需要精确控制输出时很有用。
2.2 格式化输入函数scanf()
scanf()是printf()的输入版,其原型为:
c复制int scanf(const char *format, ...);
使用scanf()时需要特别注意:
- 变量前必须加&取地址符(字符串数组除外)
- 格式字符串中的空白字符(空格、制表符、换行符)会匹配任意数量的空白
- 非空白字符必须与输入严格匹配
一个常见的错误是:
c复制int age;
scanf("请输入年龄:%d", &age); // 错误!"请输入年龄:"不会被自动跳过
正确的做法是先用printf()输出提示信息,再用简单的scanf()读取输入:
c复制printf("请输入年龄:");
scanf("%d", &age);
2.3 字符I/O函数:getchar()和putchar()
对于简单的字符输入输出,可以使用更高效的getchar()和putchar():
c复制int getchar(void); // 从标准输入读取一个字符
int putchar(int c); // 向标准输出写入一个字符
这两个函数虽然简单,但在某些场景下非常有用。例如,实现一个简单的字符回显程序:
c复制#include <stdio.h>
int main() {
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
return 0;
}
提示:getchar()返回的是int而不是char,这是为了能够正确返回EOF(通常为-1)。
3. 文件输入输出操作
3.1 文件打开与关闭
在C语言中,文件操作需要先使用fopen()打开文件,操作完成后用fclose()关闭文件:
c复制FILE *fopen(const char *filename, const char *mode);
int fclose(FILE *stream);
文件模式(mode)常用的有:
- "r":只读
- "w":只写(文件存在则清空,不存在则创建)
- "a":追加(文件存在则追加,不存在则创建)
- "r+":读写(文件必须存在)
- "w+":读写(文件存在则清空,不
