用c语言现从文本中读取出指定学号的学生信息并显示,文本文件存放格式是每一行对应一个学生信息,最后一行没有换行符。
时间: 2024-01-01 17:07:47 浏览: 121
假设学生信息存储在名为“students.txt”的文本文件中,每行格式为“学号 姓名 年龄 性别”,可以按照以下步骤读取指定学号的学生信息:
1. 打开文件并检查是否成功打开。
2. 使用fgets()函数从文件中读取一行学生信息,直到文件结束或者找到目标学生。
3. 使用sscanf()函数将读取的一行学生信息解析为学号、姓名、年龄、性别四个字段。
4. 如果解析出的学号与目标学号相同,则输出该学生的信息并退出循环。
5. 如果已经读取完整个文件但是没有找到目标学生,则输出提示信息。
以下是示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LINE_LEN 100
int main() {
char filename[] = "students.txt";
char target_id[] = "20210001"; // 目标学号
FILE *fp;
char line[MAX_LINE_LEN];
char id[20], name[20], gender[10];
int age;
fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to open file: %s\n", filename);
return 1;
}
while (fgets(line, MAX_LINE_LEN, fp) != NULL) {
sscanf(line, "%s %s %d %s", id, name, &age, gender);
if (strcmp(id, target_id) == 0) {
printf("ID: %s\nName: %s\nAge: %d\nGender: %s\n", id, name, age, gender);
break;
}
}
if (feof(fp) && strcmp(id, target_id) != 0) {
printf("Student with ID %s not found.\n", target_id);
}
fclose(fp);
return 0;
}
```
注意,上述代码中使用了fgets()函数来读取文件中的一行信息,而不是直接使用fscanf()函数读取四个字段。这是因为fgets()函数可以保证读取整个一行信息,而不会因为空格或者其他分隔符造成读取错误。同时,fgets()函数也可以检测到文件是否已经结束,从而避免了因为读取到文件结尾之前就读取完毕造成的错误。
阅读全文