新人上路,不懂就问。。大神求教!!
学校一个作业。。想了一段时间了,网上找不到类似的,看书,书上有些地方也不是很懂。。所以还是努力自己写了一个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的文件。










。但是我在你的指导下认真修改了下程序。