如何创建一个函数来读取test.txt中的结构。我在main中有一个很好的工作代码,但是我需要从main()中执行它。如何合并(struct student PI 1 [N]和(fread()or fgets()or fwrite()));第一个
nlejzf6q1#
不要说“可以创建一个函数来读取test.txt中的结构”,而是从一个函数开始,将一个 string 从fgets()转换为struct,然后根据需要调用它。使用sprintf()和" %n"检测没有额外文本的完整扫描。
fgets()
struct
sprintf()
" %n"
// Return success flag bool string_to_student(struct student *stu, const char *s) { int n = 0; sscanf(s, "%49s%49s%49s%d %n", stu->surname, stu->name, stu->dayBirth, &stu->mark, &n); return n > 0 && s[n] == '\0'; }
用途
while (i < N && fgets(str, sizeof str, ptr) && string_to_student(&PI1[i], str)) { i++; } counter = i;
2guxujil2#
最有效的解决方案是将结构存储在二进制文件中。此外,你不必关心格式等。书写:
FILE* fp; struct student; fp = fopen("test.txt", "wb"); fwrite(&student, 1, sizeof(student), fp); fclose(fp);
阅读:
FILE* fp; struct student; fp = fopen("test.txt", "rb"); fread(&student, 1, sizeof(student), fp); fclose(fp);
(Didn(为简单起见,不编写错误检查)
2条答案
按热度按时间nlejzf6q1#
不要说“可以创建一个函数来读取test.txt中的结构”,而是从一个函数开始,将一个 string 从
fgets()
转换为struct
,然后根据需要调用它。使用
sprintf()
和" %n"
检测没有额外文本的完整扫描。用途
2guxujil2#
最有效的解决方案是将结构存储在二进制文件中。
此外,你不必关心格式等。
书写:
阅读:
(Didn(为简单起见,不编写错误检查)