我创建了一个程序,该程序应该从用户那里获取输入并将其写入文本文件中。现在,我正在制作另一个程序,以从文件中读取这些记录并对它们进行排序。
例如,我有:
User three; Test three; 30
User one; Test; 51
User two; Test two; 40
程序应根据其末尾的编号对这些记录进行排序,因此应为:
User one; Test; 51
User two; Test two; 40
User three; Test three; 30
这是我目前的工作,基本上我创建了一个char one
变量,该变量将存储fgets
给出的数据并进行打印。两个问题:char one
具有固定变量(255),因此,如果记录长于255,则会出现错误。
第二个问题是我不知道如何处理文件的每个记录都有一个变量,我可以打印整个文件,但是我不知道如何根据最后一个数字比较数据,任何建议?我很期待为此使用冒泡排序。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char one[255];
FILE * fpointer = fopen("record.txt", "r");
while (!feof (fpointer) ) {
fgets(one, 255, fpointer);
printf("%s", one);
}
fclose(fpointer);
return 0;
}
答案 0 :(得分:0)
您可以代替插入气泡进行插入排序。
首先,扫描整个文件并将行的每个字段存储在数组中(您可以使用fscanf()
)。就像,数组user
存储值User Three;
,User Two;
,User One;
,另一个数组存储Test
,第三字段类似。
使数组充满文件内容后,您可以轻松地在最后一个字段上实现插入排序,并对所有数组进行相应排序,然后将数组写回到原始文件或另一个文件中。
如果您需要有关插入排序的帮助,可以签出this。
对于string comparison,请使用strcmp()
希望这会有所帮助。
编辑:扫描3个数组中的每一行,请执行以下操作:
fscanf("%s%s%s", &user[i], &test[i], &num[i], fpointer);
在循环和后续文件读取操作中运行此操作,您将获得数组中的所有数据。