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

如何用VSCode打开文本文件?C语言读取成绩文件报错退出码-1求助

问题解答

1. 如何使用VSCode打开文本文件?

  • 直接将文本文件拖拽到VSCode窗口区域,松开鼠标即可打开
  • 打开VSCode后,点击左侧边栏的资源管理器图标(文件夹样式),点击「打开文件夹」选择文件所在目录,在文件列表中双击目标文本文件打开
  • 使用快捷键:Windows/Linux按Ctrl+O,Mac按Cmd+O,在弹出的文件选择窗口中选中要打开的文本文件
  • 通过顶部菜单栏操作:点击「文件」→「打开文件」,选择目标文本文件

2. C语言代码问题排查与修复

你的程序退出码-1的直接原因是fopen函数无法找到Grades.txt文件,同时代码本身还有几处逻辑问题,以下是详细排查和修复方案:

(1)文件路径问题(打开失败的核心原因)

当你使用fopen("Grades.txt","r")这种相对路径时,程序会在当前工作目录下查找文件:

  • 如果在VSCode中运行程序,默认工作目录是当前打开的文件夹根目录,而非代码文件所在的子目录
  • 解决方法:
    • 把Grades.txt放到VSCode当前打开的文件夹根目录中
    • 或者使用绝对路径指定文件位置,比如Windows下写成fopen("C:\\Users\\你的用户名\\Desktop\\Grades.txt", "r"),Linux/Mac下写成fopen("/home/你的用户名/Desktop/Grades.txt", "r")(注意转义符)

(2)代码逻辑错误修复

即使文件成功打开,原代码仍存在以下问题:

① while(!feof(fp))的错误使用

feof只有在已经读取到文件末尾之后才会返回真,这会导致最后一次循环重复执行,引发数组越界。正确的做法是通过fscanf的返回值判断读取是否成功。

② 数组越界风险

你定义的s数组只有5个student元素,如果文件中数据行数异常,i会超过4(数组下标最大为4),导致访问非法内存。

修复后的完整代码

#include <stdio.h>
#include <stdlib.h>

struct student
{
    char name[10];
    int marks[4];
};

int main()
{
    struct student s[5];
    int i = 0;
    FILE *fp = fopen("Grades.txt", "r");
    if (fp == NULL)
    {
        printf("Error Opening the input file\n");
        return -1;
    }
    printf("File Opening successfully\n");

    // 用fscanf返回值判断读取是否成功,同时限制数组下标不越界
    while (i < 5 && fscanf(fp, "%s", s[i].name) == 1)
    {
        int valid_marks = 0;
        for (int j = 0; j < 4; j++)
        {
            // 检查成绩读取是否成功
            if (fscanf(fp, "%d", &s[i].marks[j]) == 1)
            {
                valid_marks++;
            }
        }
        // 如果4个成绩没读全,终止循环
        if (valid_marks != 4)
        {
            printf("读取第%d个学生的成绩数据出错\n", i+1);
            break;
        }
        i++;
    }

    printf("The Grade details ....\n");
    // 只遍历实际读取到的学生数据,而非固定5个
    for (int k = 0; k < i; k++)
    {
        printf("%s\n", s[k].name);
        for (int j = 0; j < 4; j++)
        {
            printf("%d\n", s[k].marks[j]);
        }
    }
    fclose(fp);
    return 0;
}

(3)额外注意事项

  • 确保Grades.txt是纯文本格式,无特殊字符或格式错误
  • 每个学生的姓名和成绩格式要与代码中fscanf的格式匹配(姓名为无空格字符串,成绩为整数)

内容的提问来源于stack exchange,提问作者ThePhycho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:07:18