You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:55:10