C语言标准库
输入输出操作的全面指南 – 编程小白的通俗解释
在C语言中,所有的输入输出操作都是通过”流”(stream)的概念来实现的。
你可以把”流”想象成一条”数据管道”,程序通过这条管道从键盘、文件等地方获取数据(输入),或者把数据发送到屏幕、文件等地方(输出)。
文件操作
fopen() – 打开文件
用于打开文件并建立文件流。需要指定文件名和打开模式。
大白话解释:就像你要看一本书,首先得打开书一样。fopen()
就是打开文件的方法。
常用模式:
- “r” – 只读(文件必须存在)
- “w” – 只写(创建新文件或覆盖现有文件)
- “a” – 追加(在文件末尾添加内容)
- “r+” – 读写(文件必须存在)
- “w+” – 读写(创建新文件或覆盖现有文件)
示例代码
FILE *file = fopen("data.txt", "r"); if (file == NULL) { printf("无法打开文件!"); return 1; }
fclose() – 关闭文件
关闭之前打开的文件。
大白话解释:就像你看完书要合上书本一样。fclose()
就是关闭文件的方法。
关闭文件很重要,因为:
- 保存所有写入的数据
- 释放系统资源
- 防止文件被误操作
示例代码
fclose(file); // 关闭文件
文件定位
控制文件中读取/写入的位置。
重要函数:
fseek(文件指针, 偏移量, 起点)
– 移动文件指针ftell(文件指针)
– 获取当前文件位置rewind(文件指针)
– 重置文件指针到开头
起点参数:
SEEK_SET
– 文件开头SEEK_CUR
– 当前位置SEEK_END
– 文件末尾
输入输出函数
printf() – 格式化输出
将格式化的数据输出到标准输出(通常是屏幕)。
格式说明符:
%d
– 整数%f
– 浮点数%c
– 单个字符%s
– 字符串%p
– 指针地址
示例代码
int age = 25; float height = 1.75f; printf("我今年%d岁,身高%.2f米\n", age, height);
输出: 我今年25岁,身高1.75米
scanf() – 格式化输入
从标准输入(通常是键盘)读取格式化数据。
注意点:
- 需要传递变量的地址(使用&符号)
- 输入的数据类型必须与格式说明符匹配
- 输入时按Enter键确认
示例代码
int num; printf("请输入一个整数: "); scanf("%d", &num); printf("你输入的是: %d\n", num);
文件读写函数
用于读写文件的函数。
常用函数:
fprintf(文件指针, 格式, ...)
– 向文件写入格式化数据fscanf(文件指针, 格式, ...)
– 从文件读取格式化数据fgetc(文件指针)
– 从文件读取一个字符fputc(字符, 文件指针)
– 向文件写入一个字符fgets(缓冲区, 长度, 文件指针)
– 从文件读取一行fputs(字符串, 文件指针)
– 向文件写入字符串
示例代码
FILE *file = fopen("output.txt", "w"); fprintf(file, "今天的日期是: %s", "2023-07-15"); fclose(file);
格式化函数
sprintf() / snprintf()
将格式化的数据写入字符串,而不是输出到屏幕或文件。
大白话解释:这两个函数就像printf()
,但它们把结果存到字符串变量中,而不是打印出来。
snprintf()
更安全,因为它限制了最大字符数,防止缓冲区溢出。
示例代码
char buffer[100]; int a = 5, b = 10; sprintf(buffer, "%d + %d = %d", a, b, a+b); // buffer现在包含:"5 + 10 = 15"
sscanf()
从字符串中读取格式化数据。
大白话解释:这个函数就像scanf()
,但它从字符串中读取数据,而不是从键盘输入。
常用于解析字符串数据(如配置文件、用户输入等)。
示例代码
char data[] = "姓名:张三 年龄:25"; char name[20]; int age; sscanf(data, "姓名:%s 年龄:%d", name, &age); // name = "张三", age = 25
错误处理
feof() 和 ferror()
检查文件流的错误状态或结束状态。
feof(文件指针):检查是否到达文件末尾
ferror(文件指针):检查文件操作中是否发生了错误
示例代码
FILE *file = fopen("data.txt", "r"); char ch; while ((ch = fgetc(file)) != EOF) { // 处理字符 } if (feof(file)) { printf("成功读取到文件末尾"); } else if (ferror(file)) { printf("读取文件时发生错误"); }
perror()
打印一条描述错误的消息。
大白话解释:当程序出错时,perror()
会打印出人类可读的错误描述,帮助你理解哪里出了问题。
它会根据全局变量errno
的值显示相应的错误信息。
示例代码
FILE *file = fopen("nonexistent.txt", "r"); if (file == NULL) { perror("打开文件失败"); // 输出: 打开文件失败: No such file or directory }