第一运行时存在断点,第二,存储到txt文件时有null。第三在执行read的sh无法读取txt文件
#include <stdio.h>
#include< stdlib.h>
#include <windows.h>
int n;
int Return;
int menu();
void input();
void end();
#define N 30
char p1[20] = { "stud.dat" };
char p2[20] = { "studsort.dat" };
FILE *fp;
struct student_type
{
char name[20];
char num[20];
double math, Eng, Chin, ave;
}
stud[N], h;
void main()
{
int start;
printf("输入学生人数(n>30)");
scanf("%d", &n);
while (1) {
start = menu();
break;
}
}
int menu()
{
int q;
int start;
system("cls");
printf("=============================================\n");
printf("=============学生成绩管理系统3.0=============\n");
printf("=============================================\n\n");
printf("_____________________________________________\n");
printf("| |\n");
printf("| 菜单栏 |\n");
printf("|___________________________________________|\n");
printf("|(1)输入学生姓名,学号,分数 |\n");
printf("|(2)显示已存储成绩 |\n");
printf("|(3) |\n");
printf("|(4) |\n");
printf("|(5) |\n");
printf("|(6) |\n");
printf("|(7) |\n");
printf("|(8) |\n");
printf("|(9) |\n");
printf("|(0)end |\n");
printf("|(输入括号里的数字,程序开始运行) |\n");
printf("|___________________________________________|\n");
scanf("%d",&q);
switch (q) {
case 1:input(); break;
case 0:end(); break;
}
return 0;
}
void end() {
printf("程序结束,欢迎下次使用。");
}
void input() {
int fclose(FILE *fp);
int Z,i;
int Return;
COORD coord;
system("cls");
printf("_____________________________________________________________________________________________\n");
printf("| number | student |student ID |科目1 |科目2 |科目3 |\n");
printf("|________|_______________|____________|_________________|_________________|_________________|\n");
for ( i = 0; i<n; i++)
{
FILE *fp;
fp = fopen("D:\\score.txt", "w");
printf("%d\t", i + 1);
/*name*/
coord.X = 10; //第3+i列
coord.Y = 3+i; //第10行
//获取控制台缓冲区句柄
HANDLE ConsoleHandleName = GetStdHandle(STD_OUTPUT_HANDLE);
//设置光标位置
SetConsoleCursorPosition(ConsoleHandleName, coord);
printf("name:");
scanf("%s", stud[i].name);
/*ID*/
coord.X = 26; //第26列
coord.Y = 3+i; //第3+i行
//获取控制台缓冲区句柄
HANDLE ConsoleHandleID = GetStdHandle(STD_OUTPUT_HANDLE);
//设置光标位置
SetConsoleCursorPosition(ConsoleHandleID, coord);
printf("ID:");
scanf("%s", stud[i].num);
getchar();
/*科目一math*/
coord.X = 39; //第40列
coord.Y = 3 + i; //第3+i行
//获取控制台缓冲区句柄
HANDLE ConsoleHandle1 = GetStdHandle(STD_OUTPUT_HANDLE);
//设置光标位置
SetConsoleCursorPosition(ConsoleHandle1, coord);
printf("科目一:");
scanf("%d", &stud[i].math);
/*科目二eng*/
coord.X = 57; //第50列
coord.Y = 3 + i; //第3+i行
//获取控制台缓冲区句柄
HANDLE ConsoleHandle2 = GetStdHandle(STD_OUTPUT_HANDLE);
//设置光标位置
SetConsoleCursorPosition(ConsoleHandle2, coord);
printf("科目二:");
scanf("%d", &stud[i].Eng);
/*科目三chin*/
coord.X = 75; //第60列
coord.Y = 3 + i; //第3+i行
//获取控制台缓冲区句柄
HANDLE ConsoleHandle3 = GetStdHandle(STD_OUTPUT_HANDLE);
//设置光标位置
SetConsoleCursorPosition(ConsoleHandle3, coord);
printf("科目三:");
scanf("%d", &stud[i].Chin);
fprintf(fp, "学号 姓名 科目一 科目二 科目三 ave\n");
fprintf(fp, "%d%16s %d%16s %16f %d%16s %d%16s\n", stud[i].num, stud[i].name, stud[i].math,
stud[i].Eng, stud[i].Chin, stud[i].ave);//math, Eng, Chin, ave
}
/*________ | _______________ | ____________ | _________________ | _________________ | _________________ |*/
printf("\n=======================================================================================================");
printf("\n======================是否删除原数据并写入新数据,按0确定,按1取消并返回菜单栏=========================");
printf("\n=======================================================================================================\n");
scanf("%d", &Z);
if (Z == 1 ) {
FILE *fp;
fp = fopen("D:\\score.txt", "w");
fprintf(fp, "学号 姓名 科目一 科目二 科目三 ave\n");
printf("\n\n+++++++++++++++++++++++++取消存储并返回菜单栏+++++++++++++++++++++++++\n\n");
}//end if
else printf("\n\n*******************恭喜,保存完成!即将返回菜单栏*******************\n\n");
printf("+++++++++++++++++++++++++5s后返回返回菜单栏+++++++++++++++++++++++++");
Sleep(5 * 1000); //sleep for 5 seconds
fclose(fp);//关闭txt
Return = menu();
}
void read() {
int Return;
int fclose(FILE *fp);
int Z;
char name[10];
char num[20];
COORD coord;
FILE *fp;
system("cls");
if ((fp = fopen("score.txt", "r")) == NULL) {
printf("+++++++++++++++++++++++++++Fail to open file!+++++++++++++++++++++++++++\n");
printf("++++++++++++++++++++++++++++++即将返回菜单++++++++++++++++++++++++++++++\n");
Sleep(5 * 1000); //sleep for 5 seconds
Return = menu(); //返回菜单
}//end if
fp = fopen("D:\\score.txt", "r");/*以读模式("r")打开文件score.txt*/
fscanf(fp, "%s", name);
fscanf(fp, "%s", num);/*从文件读取*/
printf("%s\n%s", name, num);
fclose(fp); /*关闭文件*/
Return = menu();
}