用C语言实现从文本中读取出指定学号的学生信息并显示,文本文件存放格式是每一行对应一个学生信息,最后一行没有换行符。
时间: 2024-01-01 12:22:27 浏览: 88
好的,可以使用C语言来实现读取文本中指定学号的学生信息并显示。假设文本文件的名字为“students.txt”,每一行的格式为“学号 姓名 年龄 性别”,代码实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100 // 定义一个最大长度
struct student {
char id[20];
char name[20];
int age;
char gender;
};
int main() {
char student_id[20];
char line[MAX_LEN];
struct student s;
int found = 0; // 是否找到目标学生信息的标志
printf("请输入要查询的学号:");
scanf("%s", student_id);
FILE *fp;
fp = fopen("students.txt", "r");
if (fp == NULL) {
printf("文件打开失败!\n");
exit(1);
}
while (fgets(line, MAX_LEN, fp)) {
sscanf(line, "%s %s %d %c", s.id, s.name, &s.age, &s.gender);
if (strcmp(s.id, student_id) == 0) { // 判断学号是否相等
printf("学号:%s,姓名:%s,年龄:%d,性别:%c\n", s.id, s.name, s.age, s.gender);
found = 1;
break;
}
}
if (!found) {
printf("未找到该学生信息!\n");
}
fclose(fp);
return 0;
}
```
首先定义了一个结构体`student`,包含学号、姓名、年龄和性别四个成员变量。然后定义一个`main`函数,首先读取用户输入的学号,打开文件“students.txt”,遍历每一行,将每一行的信息按空格进行分割,将分割后的信息存储到结构体`s`中,判断学号是否与传入的参数相等,如果相等则输出该学生信息,并将`found`标志置为1,退出循环。如果遍历完整个文件都没有找到对应学号的学生,则输出未找到该学生信息的提示。
需要注意的是,读取每一行信息时使用了`fgets`函数,而不是`fscanf`函数,因为前者可以读取任意长度的字符串,而后者只能读取指定长度的字符串。
最后关闭文件并返回0。
阅读全文