如何在C程序中读写文件生成乘法表?解决C2374编译错误
问题分析与解决方案
错误原因(C2374)
你遇到的C2374错误是因为在main函数的同一作用域内重复定义了同名变量FILE* fp——写文件时定义了一次,读文件时又重新定义了一次,C语言不允许这种操作。
其他代码问题及修正点
除了重复定义的问题,代码还有几个影响功能实现的问题:
- 写文件后未关闭文件,导致缓冲区内容可能未完全写入磁盘,后续读取会出错;
- 当前仅写入了i=2的乘法表,未满足“两个乘法表”的需求;
- 读取文件时未检查文件是否成功打开,存在空指针风险;
fprintf中的换行符写法错误,应使用标准转义字符\n。
修正后的完整代码
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main(void) { // File Write FILE* fp = fopen("99.txt", "wt"); if (fp == NULL) { puts("file open fail."); return 1; } // 循环写入两个乘法表(i=1和i=2) for (int i = 1; i <= 2; i++) { for (int j = 1; j <= 9; j++) { fprintf(fp, " %d X %d = %2d\n", i, j, i * j); } // 两个乘法表之间加空行分隔 fprintf(fp, "\n"); } // 写完文件必须关闭,刷新缓冲区 fclose(fp); // File Read fp = fopen("99.txt", "rt"); // 直接复用已声明的fp变量,不再重新定义 if (fp == NULL) { puts("file open fail."); return 1; } char str[100]; while (fgets(str, sizeof(str), fp) != NULL) { printf("%s", str); // 明确使用%s格式化输出,避免str中包含特殊字符的风险 } fclose(fp); return 0; }
代码说明
- 去掉重复的
FILE* fp定义,读文件时直接复用已声明的变量; - 增加外层循环,让i从1到2,实现写入两个乘法表的需求;
- 写文件完成后调用
fclose(fp),确保内容完全写入磁盘; - 读取文件时增加空指针检查,提升代码健壮性;
- 修改
printf(str)为printf("%s", str),避免因str中包含%等特殊字符导致的输出异常; - 两个乘法表之间添加空行,让输出更清晰,符合预期格式。
内容的提问来源于stack exchange,提问作者noah
相关产品推荐
相关产品推荐

