user-0 提问: 啊啊啊啊啊啊啊啊啊啊啊啊啊求求大佬们看看！！！！

回复:
user: user-1
content: 指针！我问的是，它等于多少，不是问你是什么类型，类型我能不知道吗？

user: user-0
content: 引用 11 楼 user-1的回复:到底fopen返回什么都不知道，发的图啥意思？ 返回的是布尔型 不是吗

user: user-1
content: 到底fopen返回什么都不知道，发的图啥意思？

user: user-1
content: 一些编码有影响。。。

user: user-0
content: 引用 8 楼 user-1的回复:那个能看吗？打开文件失败基本都是路径问题，好好看一下 吼滴 对了文档里有中文字符影不影响啊

user: user-1
content: 那个能看吗？打开文件失败基本都是路径问题，好好看一下

user: user-0
content: 引用 1 楼 user-1的回复:知道在哪个路径吗？不知道的话写上全路径 这个源码...调试就是那一步fopen 函数的问题

user: user-0
content: 引用 4 楼 user-1的回复:你怎么知道没错，有的话要验证之后再来回答 #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<iostream>using namespace std;#include<stdlib.h>#include <string.h>#define MaxSize 8char Ftop[50]; //成绩文件顶部的标题用top保存typedef struct student //单个学生成绩的记录{	char name[MaxSize]; //姓名	int number; //学号	int chinese; //语文	int math; //数学	int english; //英语	struct student* next;//指向下一个结点}student, *StuGradelist;char* address1 = (char *)"1.txt";char* address2 = (char *)"2.txt";char* address3 = (char *)"3.txt";char* address4 = (char *)"4.txt";typedef struct //链表不容易操作，故而新建一个结构数组{	int TotalGrade;	char name[10];	int number;	int chinese;	int math;	int english;}gradeNote; //成绩记录typedef struct{	gradeNote stu[100]; //顺序存储100个记录；}gradeList; //待排序成绩表gradeList L;StuGradelist fRead(char *address) //读取成绩文件{	FILE* f1;	if ((f1=fopen("1.txt","r")) == NULL) //打开文件并且只读	{		printf("文件为空，打不开");		exit(0);	}	StuGradelist file = (student*)malloc(sizeof(student)); //声明指向结构体类型的指针并且申请内存空间	file->next = NULL;//初始化	student* p = file; //使得p指向file；	int i = 0; //循环标记，具体作用是在第一次循环时方便处理标题	while (feof(f1))//判断读取文件是否结束	{		if (i == 0)		{			fgets(Ftop, 50, f1); //处理标题，并且文件指针移到第二行			i = 1;		}		if (i == 1) //申请空间，初始化链表		{			p->next = (student*)malloc(sizeof(student));			p = p->next;			p->next = NULL;		}		fscanf(f1, "%s%d%d%d%d", p->name, &p->number, &p->chinese, &p->math, &p->english); //格式化输入数据，保存到f1指向的内存空间。	}	if (fclose(f1)) //关闭文件	{		printf("文件关闭失败");		exit(0);	}	return file;}void fPrint(StuGradelist file) //将成绩文件打印到屏幕上{	student* p = file;	printf("%s\n",Ftop); //打印标题	while (p->next!=NULL)//循环打印	{		printf("%6s %2d %d %d %d\n", p->name, p->number, p->chinese, p->math, p->english); 		p = p->next;//指针下移	}}void add() //合并文件{	StuGradelist file1 = fRead(address1);	StuGradelist file2 = fRead(address2);	FILE* file;	if ((file = fopen(address3,"w+")) == NULL) //先新建一个3.txt文本，然后将1.txt和2.txt的内容输入到里面	{		printf("合并成绩文档失败，原因：建立文档出错");		exit(0);	}	student* p1 = file1, *p2 = file2;	fprintf(file,"%s", Ftop); //先输出标题	while (p1->next!=NULL)	{		fprintf(file,"%6s %2d %d %d %d\n", p1->name, p1->number, p1->chinese, p1->math, p1->english); //输出1.txt 		p1 = p1->next;	}	while (p2->next != NULL)	{		fprintf(file, "%6s %2d %d %d %d\n", p2->name, p2->number, p2->chinese, p2->math, p2->english); //输出2.txt		p2 = p2->next;	}	if (fclose(file))	{		printf("文件关闭失败");		exit(0);	}}void Bk() //抽取补考的成绩记录{	FILE* f1;	if ((f1 = fopen("4.txt", "w+")) == NULL) //新建文件4.txt	{		printf("抽取补考学生成绩记录建立新文件失败");		exit(0);	}	StuGradelist file3 = fRead(address3);	student* p = file3;	fprintf(f1,"%s",Ftop); //先输出标题	while (p->next!=NULL)	{		if (p->chinese< 60 || p->math< 60 || p->english<60) //补考条件		{			fprintf(f1, "%6s %2d %d %d %d\n", p->name, p->number, p->chinese, p->math, p->english);		}		p=p->next;	}	if (fclose(f1))	{		printf("文件关闭失败");		exit(0);	}}void sort(){	StuGradelist file3 = fRead(address3); //先将3.txt读入链表	student* p = file3;//指向链表	if (remove("3.txt")) //排序后的内容要保存到3.txt，先删除3.txt	{		printf("删除文件出错");		exit(0);	}	int num = 0; //学生个数	FILE* file;	if ((file = fopen(address3,"w+")) == NULL) //新建一个空的3.txt	{		printf("新建文件出错");		exit(0);	}	fprintf(file, "%s", Ftop); //标题先输入	p = file3;	for (int i = 1; i <= num; i++, p = p->next) //将链表的内容复制到结构数组stu中里	{		strcpy(L.stu[i].name, p->name);		L.stu[i].number = p->number;		L.stu[i].chinese = p->chinese;		L.stu[i].math = p->math;		L.stu[i].english = p->english;		L.stu[i].TotalGrade = p->chinese + p->math + p->english;	}	printf("请选择排序方式：\n冒泡排序请按1选择排序请按2\n");	int choice;	cin >> choice;	if (choice == 1)	{		for (int i = 0; i < num - 1; ++i)  //比较n-1轮		{			gradeNote temp;			for (int j = 0; j < num - 1 - i; ++j)  //每轮比较n-1-i次,			{				if (L.stu[j].TotalGrade < L.stu[j + 1].TotalGrade)				{					temp = L.stu[j];					L.stu[j] = L.stu[j + 1];					L.stu[j + 1] = temp;//交换位置；				}			}		}	}	else	{		gradeNote temp1;		for (i = 1; i <= num - 1; i++) {			for (int j = i + 1; j <= num; j++)				if (L.stu[i].TotalGrade < L.stu[j].TotalGrade)    //如果前一个数比后一个数小，则利用中间变量t实现两值互换				{					temp1 = L.stu[i];					L.stu[i] = L.stu[j];					L.stu[j] = temp1;				}		}	}	for (int n = num; n>= 1; num--) //将排序好的内容输入到3.txt	{		fprintf(file, "%6s %2d %d %d %d\n", L.stu[n].name, L.stu[n].number, L.stu[n].chinese, L.stu[n].math, L.stu[n].english);	}	if (fclose(file))	{		printf("文件关闭失败");		exit(0);	}}void search(char* name) //按姓名查找{	StuGradelist file = fRead(address3);	student* p = file;	while (p->next != NULL)	{		if (!strcmp(name, p->name))//比较字符串		{			printf("%6s %2d %d %d %d\n", p->name, p->number, p->chinese, p->math, p->english);			return;		}		p = p->next;	}	printf("查无此人,请确定名字输入正确\n");	exit(0);} void main(){	int choice;	int flag = 1;	printf("学生成绩管理系统                      \n");	printf("1.显示文件1                           \n");	printf("2.显示文件2                           \n");	printf("3.合并文件1和2                        \n");	printf("4.查找                                \n");	printf("5.退出本系统                                \n");	while (flag)	{		printf("请输入想要选择的操作：            \n");		cin >> choice;		switch (choice)		{		case 1:		{				StuGradelist file1 = fRead(address1);			fPrint(file1);			break;		}			case 2:		{			StuGradelist file2 = fRead(address2);			fPrint(file2);			break;		}		case 3:		{			add();			StuGradelist file3 = fRead(address3);			sort();			fPrint(file3);			break;		}		case 4:		{			StuGradelist file4 = fRead(address4);			fPrint(file4);			break;		}		case 5:			flag = 0;			break;		default:			printf("输入错误，请重新输入：    \n");		}	}}

user: user-0
content: ！不是 我刚刚试了 还是不行

user: user-1
content: 你怎么知道没错，有的话要验证之后再来回答

user: user-0
content: 引用 1 楼 user-1的回复:知道在哪个路径吗？不知道的话写上全路径 fopen 函数的行参没错啊

user: user-0
content: 引用 1 楼 user-1的回复:知道在哪个路径吗？不知道的话写上全路径 知道！！就是写该目录下的路径吧

user: user-1
content: 知道在哪个路径吗？不知道的话写上全路径