我有一个充满姓氏的数组。我希望我的程序使用这些姓氏如下:
姓氏按字母顺序排序。我使用fscanf读取信息,然后使用strcmp查看字符串是否相同,但是当我运行程序时,它只是将一个学生名称复制到文件而没有别的。这是我正在使用的代码:
for(i=0; i<SURNAMES; i++)
{
//Search file 1
while (fscanf(fp, "%d %s %s %s",&student_id,first_name,surname,student_type) != EOF)
{
if(strcmp(surnames[i], surname) == 0)
{
fprintf(sorted_students, "%d %s %s %s\n",student_id,first_name,surname,student_type);
}
}
//Search file 2
while (fscanf(fp2, "%d %s %s %s",&student_id,first_name,surname,student_type) != EOF)
{
if(strcmp(surnames[i], surname) == 0)
{
fprintf(sorted_students, "%d %s %s %s\n",student_id,first_name,surname,student_type);
}
}
}
当我将for循环置于while循环中时,它会以某种方式工作,但是当我这样做时,最初可能位于第二个文件中的学生将被忽略。如果我把for循环放在里面,那么按字母顺序排序学生的整个想法就会丢失,并且它们不会根据它们在原始数组中的位置进行排序。
答案 0 :(得分:2)
你应该去第一个文件,第一个是&#34; for循环&#34;每次! 使用fseek功能。
fseek(fp, 0, SEEK_SET);
fseek(fp2, 0, SEEK_SET);