一、实验目标
- 熟练运用标准输入输出函数(
scanf、printf)处理不同类型数据的输入与输出。
- 掌握简单文本文件的读写操作,能编写完整的文件操作程序。
二、核心知识回顾
(一)标准输入函数:scanf
- 语法格式:
scanf(格式控制字符串, 变量地址列表)。
- 核心要求:第2至n个参数必须是变量地址(加
&)或指向变量地址的指针。
- 常用格式控制符
- 整型:
%d(有符号十进制)、%u(无符号十进制)、%o(八进制)、%x/X(十六进制)。
- 实型:
%f(小数/指数形式)、%e/E(指数形式)、%g/G(自动选最短格式)。
- 字符/字符串:
%c(单个字符)、%s(字符串)。
- 附加格式符:
l(长整型/双精度)、h(短整型)、域宽(指定输入宽度)、*(读入不赋值)。
- 关键注意事项
- 输入数据需与格式控制字符串完全匹配,否则停止读取。
- 读取整型数据时,遇空格、回车、非小数点符号或字母即结束。
%c会读取空格、回车等空白字符,需注意输入顺序。
(二)标准输出函数:printf
- 语法格式:
printf(格式控制字符串, 输出数据列表)。
- 常用格式控制符:与
scanf基本一致,%f默认输出6位小数。
- 附加格式符:
l(长整型)、m(最小输出宽度)、.n(指定小数位数/字符串截取长度)、-(左对齐)。
- 功能:可输出变量、常量或表达式的值,支持多类型数据同时输出。
(三)文本文件操作
- 核心流程:包含头文件(
#include <stdio.h>)→ 定义文件指针(FILE *fp)→ 打开文件(fopen)→ 读写操作(fscanf/fprintf)→ 关闭文件(fclose)。
- 关键函数
- 打开文件:
fp = fopen("文件名", "打开方式"),常用方式有"w"(只写,创建新文件)、"r"(只读,需文件已存在)。
- 写文件:
fprintf(文件指针, 格式字符串, 输出表列),用法与printf类似,多文件指针参数。
- 读文件:
fscanf(文件指针, 格式字符串, 地址表列),用法与scanf类似,需指定文件指针。
- 关闭文件:
fclose(文件指针),避免数据丢失和资源占用。
三、实验内容与示例代码
(一)实验1:字符型数据的双重显示
- 实验要求:定义两个字符型变量,分别用字符方式和整数方式显示,验证字符与ASCII码的对应关系。
- 示例代码
#include <stdio.h>
int main() {
char c1, c2;
c1 = 'a'; // 可替换为97、197等数值
c2 = 'b'; // 可替换为98、198等数值
printf("%c %c\n", c1, c2); // 字符方式显示
printf("%d %d\n", c1, c2); // 整数方式显示(ASCII码)
return 0;
}
- 预期结果:字符初始化时输出对应字符及ASCII码(如
a b和97 98),超出ASCII范围的数值输出特殊字符及对应整数。
(二)实验2:多类型数据的输入与输出
- 实验要求:通过
scanf输入指定数据(a=3、b=7、x=8.5、y=71.82、c1=A、c2=a),并用printf显示。
- 示例代码(两种格式控制方式)
- 基础格式
#include <stdio.h>
int main() {
int a, b;
float x, y;
char c1, c2;
scanf("%d%d", &a, &b);
scanf("%f%f", &x, &y);
scanf("%c%c", &c1, &c2);
printf("a=%d, b=%d\n", a, b);
printf("x=%f, y=%f\n", x, y);
printf("c1=%c, c2=%c\n", c1, c2);
return 0;
}
- 带提示字符格式
#include <stdio.h>
int main() {
int a, b;
float x, y;
char c1, c2;
scanf("a=%d, b=%d,", &a, &b);
scanf("x=%f, y=%f,", &x, &y);
scanf("%c,%c", &c1, &c2);
printf("a=%d, b=%d\n", a, b);
printf("x=%f, y=%f\n", x, y);
printf("c1=%c, c2=%c\n", c1, c2);
return 0;
}
(三)实验3:文本文件写入
- 实验要求:创建文本文件,写入整型、实型、字符型数据。
- 示例代码
#include <stdio.h>
int main() {
int a;
float b;
char c;
FILE *fp;
scanf("%d,%f,%c", &a, &b, &c); // 输入格式:123,4.5,n
fp = fopen("test1.txt", "w"); // 以只写方式创建文件
fprintf(fp, "%d %f %c\n", a, b, c); // 写入文件
fclose(fp); // 关闭文件
return 0;
}
(四)实验4:文本文件读取与显示
- 实验要求:读取已创建的文本文件数据,显示到屏幕上。
- 示例代码
#include <stdio.h>
int main() {
int a1;
float b1;
char c1;
FILE *fp;
fp = fopen("test1.txt", "r"); // 以只读方式打开文件
fscanf(fp, "%d,%f,%c", &a1, &b1, &c1); // 按写入格式读取
printf("a1=%d, b1=%f, c1=%c\n", a1, b1, c1); // 显示数据
fclose(fp); // 关闭文件
return 0;
}
四、重难点总结
(一)重点
scanf和printf的格式控制符匹配与参数使用。
- 文本文件“打开-读写-关闭”的完整流程。
- 不同类型数据的输入输出格式规范。
(二)难点
scanf输入时的格式匹配问题,尤其是空白字符的处理。
- 文件操作函数的正确调用,包括文件路径、打开方式的选择。
五、思考题
- 为何
scanf需要使用变量地址,而printf不需要?
- 文件操作结束后,为何必须用
fclose关闭文件?