新人上路,不懂就问。。大神求教!!
学校一个作业。。想了一段时间了,网上找不到类似的,看书,书上有些地方也不是很懂。。所以还是努力自己写了一个C。写得可能有点蠢,希望各路大神不吝赐教。。程序代码:
/* 编写一程序P337.C实现以下功能 有一存储很多学生成绩的文本文件(学生与课程数不限),每个学生的数据包括学号(10个数字)、姓名(最多4个汉字)、性别、 课程名称(最多7个汉字)、成绩(整数)。从键盘输入某个学生的姓名,要求在文件中查找有无其成绩记录(可能有多条记录或没有), 然后在屏幕上显示出相应的信息。 单击此处下载程序运行时测试用的学生成绩文件xscj.txt并保存到程序P337.C所在的文件夹且文件名保持不变。 编程可用素材:printf("请输入要查找成绩的学生姓名:")、printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!")、 printf("\n查找结果为:\n")、printf("文件中没有找到姓名为“…”的学生\n"…。 程序的运行效果应严格地如图1、图2、图3所示,图中的红色部分是从键盘输入的内容。 */ #include <stdio.h> #include <string.h> typedef struct xuesheng { int xuehao[3]; char mingzi[20]; char xingbie[5]; char kemu[30]; int chengji; }DENGJI; /*结构体定义*/ int main(void) { FILE *fp; DENGJI chazhao[30]; char shuru[10]; /*输入存入该字符串变量*/ int i, flag = 0, count = 0; /*定义标记和序号计数并赋值为0*/ fp = fopen("xscj.txt", "r"); if (fp == NULL) { printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!"); return 0; } /*判断文件是否正常打开*/ printf("请输入要查找成绩的学生姓名:"); gets(shuru); /*输入名字*/ while (!feof(fp)) { i = 0; fscanf(fp, "%s, %s, %s, %s, %d", chazhao[i].xuehao, chazhao[i].mingzi, chazhao[i].xingbie, chazhao[i].kemu, &chazhao[i].chengji); i++; } /*将文件内容读入结构体数组*/ while (!feof(fp)) { i = 0; if (strcmp(chazhao[i].mingzi, shuru) == 0) { flag = 1; break; } /*判断是否有结构体元素成员与输入名字相等,并将标记赋值退出循环*/ else { flag = 0; } i++; } if (flag == 0) { printf("文件中没有找到姓名为“%s”的学生\n", shuru); return 0; } /*标记为0说明上一次循环查找没有所寻值*/ if (flag == 1) { printf("\n查找结果为:\n"); while (!feof(fp)) { i = 0; if (strcmp(chazhao[i].mingzi, shuru) == 0) { count++; /*判断成功,序号赋值*/ printf("%d, %s, %s, %s, %s, %d\n",count, chazhao[i].xuehao, chazhao[i].mingzi, chazhao[i].xingbie, chazhao[i].kemu, chazhao[i].chengji); /*输出结果*/ } i++; } return 0; } }
xscj.zip
(738 Bytes)
xscj的文件。