while(fscanf(fp,"%s %s %s %s %s %s",sub[i].num,sub[i].line,sub[i].sstation,sub[i].ostation,sub[i].charge,sub[i].wstation)!=EOF) { i++; } n=i; int j,item,flag=0; char s1[10]; printf("----------------------------------------------------------\n"); printf("------------------◎ 1.按线路查询 ◎--------------------\n"); printf("------------------◎ 2.按起始站查询 ◎--------------------\n"); printf("------------------◎ 3.按终点站查询 ◎--------------------\n"); printf("------------------◎ 4.退出本菜单 ◎--------------------\n"); printf("----------------------------------------------------------\n"); while(1) { printf("请选择子菜单编号:"); scanf("%d",&item); flag=0; switch(item) { case 1: printf("请输入要查询的地铁线路:");//通过地铁线路查找 scanf("%s",s1); for(j=0;j<n;j++) if(strcmp(sub[j].line,s1)==0) {
时间: 2023-08-15 22:12:20 浏览: 115
这段代码是一个基本的地铁查询系统,通过读取一个文件中的地铁信息,实现了按照地铁线路、起始站和终点站查询的功能。用户可以选择菜单中的选项,输入相关信息进行查询。
具体来说,这段代码首先通过循环读取文件中的地铁信息,将其存储在一个结构体数组中。然后,程序进入一个循环,显示菜单供用户选择查询选项。根据用户的选择,程序通过不同的方式查询地铁信息,并输出结果。
例如,当用户选择按照地铁线路查询时,程序会提示用户输入要查询的地铁线路。程序会遍历存储的地铁信息,找到所有符合条件的地铁线路,并输出相关信息。
需要注意的一点是,这段代码中存在一些潜在的问题。例如,输入信息没有进行越界检查,可能导致程序崩溃。另外,程序的查询功能比较简单,无法处理一些复杂的查询需求。如果需要实现更复杂的查询功能,需要对程序进行扩展。
相关问题
while (!feof(fp1)) { Student student; fscanf(fp1, "%s %s %s %s %s %f %f %f\n", student.stu_id, student.name, student.sex, student.birthdate, student.phone_num, &student.english, &student.math, &student.total); if (strcmp(student.stu_id, stu_id) == 0) { printf("请输入修改后的信息:\n"); printf("输入学号:"); scanf("%s", &student.stu_id); printf("输入姓名:"); scanf("%s", &student.name); printf("输入性别:"); scanf("%s", &student.sex); printf("输入出生年月:"); scanf("%s", &student.birthdate); printf("输入电话号码:"); scanf("%s", &student.phone_num); printf("输入英语成绩:"); scanf("%f", &student.english); printf("输入数学成绩:"); scanf("%f", &student.math); student.total = student.english + student.math; fprintf(fp2, "%s %s %s %s %s %.2f %.2f %.2f\n", student.stu_id, student.name, student.sex, student.birthdate, student.phone_num, student.english, student.math, student.total); printf("修改成功!\n"); flag = 1; } else { fprintf(fp2, "%s %s %s %s %s %.2f %.2f %.2f\n", student.stu_id, student.name, student.sex, student.birthdate, student.phone_num, student.english, student.math, student.total); } }
这段代码是一个从文件中读取学生信息、修改指定学生信息并将修改后的结果写入到另一个文件中的程序。
程序的执行流程如下:
1. 打开一个名为 fp1 的文件指针,用于读取学生信息。
2. 进入一个 while 循环,判断文件指针是否已经指向文件的末尾。
3. 如果文件指针不在文件末尾,则从文件中读取一条学生信息。
4. 判断当前读取的学生信息是否为要修改的学生信息,如果是则提示用户输入修改后的信息,并将修改后的结果写入到另一个名为 fp2 的文件中。
5. 如果当前读取的学生信息不是要修改的学生信息,则将该学生信息直接写入到 fp2 文件中。
6. 如果在整个文件中都没有找到要修改的学生信息,则输出 "未找到该学生信息!" 的提示信息。
7. 关闭文件指针 fp1 和 fp2。
需要注意的是,这段程序中使用了两个文件指针,其中一个用于读取学生信息,另一个用于将修改后的结果写入到文件中。同时,程序中也使用了结构体来存储学生信息,方便对学生信息进行修改和输出。
while (fscanf(fp,"%s %s %s", Student[i].czName, Student[i].czNumber, Student[i].guli) != EOF) { nCount++; // i++; }
这段代码中,使用fscanf()函数从文件中读取数据。fscanf()函数的返回值是成功读取的参数数量,如果返回值不等于3,则说明读取失败或到达文件末尾。因此,while循环的条件应该是:
```c
while (fscanf(fp, "%s %s %s", Student[i].czName, Student[i].czNumber, Student[i].guli) == 3)
```
这样,只有在成功读取3个参数时,while循环才会继续执行。另外,由于变量i没有初始化,使用i来访问数组Student是不安全的。您应该使用另一个变量来追踪数组Student中的元素数量,例如:
```c
int nCount = 0;
while (fscanf(fp, "%s %s %s", Student[nCount].czName, Student[nCount].czNumber, Student[nCount].guli) == 3) {
nCount++;
}
```
这样,每次成功读取3个参数时,数组Student中的元素数量就会增加。
阅读全文