如何用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
相关产品推荐
相关产品推荐

