「1001 name surname 10 20 30」、生徒数、名前、姓、および 3 つの成績などの情報を含むテキスト ファイルをプログラムに読み取らせようとしています。これが私のコードです:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student {
int number;
char name[30];
char surname[30];
int midterm1,midterm2,midterm3;
} Student;
int comp(const void * aa, const void * bb)
{
struct Student a = *(struct Student*)aa;
struct Student b = *(struct Student*)bb;
if (a.midterm1==b.midterm1)
return 0;
else if (a.midterm1 < b.midterm1)
return -1;
else
return 1;
} // comp
int main(void)
{
int choice,studentnumber,midterm1,midterm2,midterm3,i,n;
char surname;
FILE *cfPtr;
struct student *name;
name = malloc( 10 * sizeof(Student));
if ((cfPtr = fopen("grades.txt", "r")) == NULL)
return 1;
const int STUDENTSMAX = 100;
struct Student students[STUDENTSMAX];
char buff[1024];
while(1)
{
memset(buff, 0, sizeof(buff));
fgets(buff, sizeof(buff) -1, cfPtr);
if (feof(cfPtr)) {
break;
}
sscanf(buff, "%d %s %s %d %d %d", &students[i].number, students[i].name, students[i].surname, &students[i].midterm1, &students[i].midterm2, &students[i].midterm3);
printf("%4d %15s %15s %10d %10d %10d\n", students[i].number, students[i].name, students[i].surname, students[i].midterm1, students[i].midterm2, students[i].midterm3);
i++;
} // while
while (!feof(cfPtr))
{
fscanf(cfPtr, "%d%s%s%d%d%d", &students[i].number, &students[i].name,&students[i].surname, &students[i].midterm1, &students[i].midterm2, &students[i].midterm3);
printf("%4d%15s%15s%10d%10d%10d\n", students[i].number, students[i].name,students[i].surname, students[i].midterm1, students[i].midterm2, students[i].midterm3);
i++;
} // while
printf("What would you like to do? \n"
"1- Sort according to midterm 1\n"
"2- Sort according to midterm 2\n"
"3- Sort according to midterm 3\n"
"4- Exit\n");
scanf("%d",&choice);
scanf("%d",&choice);
switch (choice) {
case 1:
qsort(students, i, sizeof(struct Student), comp);
for (n = 0; n < i; n++) {
printf("%4d %15s %15s %10d %10d %10d\n", students[n].number, students[n].name, students[n].surname, students[n].midterm1);
} // for
break;
case 2:
qsort(students, i, sizeof(struct Student), comp);
for (n = 0; n < i; n++) {
printf("%4d %15s %15s %10d %10d %10d\n", students[n].number, students[n].name, students[n].surname, students[n].midterm2);
} // for
break;
case 3:
qsort(students, i, sizeof(struct Student), comp);
for (n = 0; n < i; n++) {
printf("%4d %15s %15s %10d %10d %10d\n", students[n].number, students[n].name, students[n].surname, students[n].midterm3);
} // for
break;
} // switch
} // main?
fclose(cfPtr);
system("PAUSE");
return 0;
} // the editor failed to find the corresponding '{' !OP should fix this
この現在のコードは、次のエラーを返します。
95 C:\Users\UseR\Desktop\main.c [Warning] parameter names (without types) in function declaration
95 C:\Users\UseR\Desktop\main.c [Warning] data definition has no type or storage class
98 C:\Users\UseR\Desktop\main.c syntax error before string constant
98 C:\Users\UseR\Desktop\main.c [Warning] data definition has no type or storage class
C:\Users\UseR\Desktop\Makefile.win [Build Error] [main.o] Error 1
プログラムは問題なくコンパイルおよび動作していますが、それでもエラーが発生し、まったくソートされません。ここで何が間違っていますか?
編集:これが私の入力ファイルです。
100201 al beaver 40 50 70
100202 andrew matthews 30 90 75
100203 leah doga 60 55 80
100204 rob kurt 45 80 60
100205 aliah devon 65 70 50
100206 sally pir 70 40 85
100207 eric bekta 75 65 55
100208 nile coul 55 75 65
100209 mina umur 72 60 90
100210 john hot 73 63 87
PS はい、これは誰もが尋ねる前の宿題です。私は時間がなくなってきており、何日もしっかりと進歩していないのに本当に努力しています。主に聞かれたのは」
- 選択した試験の成績を降順で並べ替えます。出力ファイルには、選択した試験の名前、姓、およびスコアの 3 つの列のみが含まれます。
- 「student」という名前の構造体を定義して、各学生の名前、姓、およびスコアを同じ変数名で格納します。したがって、ファイル内のすべてのデータは、「学生」という名前の新しいデータ型の配列に格納されます。」