文件处理代码编译但不运行

时间:2015-05-24 00:34:09

标签: c file-io

我正在做的基本上是我正在读取文件,将其保存到数组中,并尝试打印它。但是我的代码似乎有什么问题?

#include<stdio.h>
#include<string.h>

typedef struct{
    int studentNumber;      //struct declaration
    char name[31];
    float quizzes[8];
    float exams[3];
    float overallGrade;
    float standing;
}Student;

//function for transferring

void transfer(Student myList[]){
    int x=0;
    for (x=0; x<3;x++){
        printf("%d\n",myList[x].studentNumber);
        printf("%d\n",myList[x].quizzes);
        printf("%d\n",myList[x].exams);
    }

}
int main(){
    FILE *read = NULL; //creates a stream
    Student myList[50];
    int ctr=0;
    char buf[128];
    read = fopen("file.txt", "r"); //opens the file

    if(read==NULL)
        printf("FILE NOT FOUND!");
    else{
        while(!feof(read)){
            fgets(buf, sizeof(buf), read);  //reads first line
            sscanf(buf, "%d,", myList[0].studentNumber);
            fgets(buf, sizeof(buf), read);  //reads second Line
            sscanf(buf, "%d,%d,%d,%d,%d,%d,%d,%d", &myList[ctr].quizzes[0],&myList[ctr].quizzes[1],&myList[ctr].quizzes[2],&myList[ctr].quizzes[3],&myList[ctr].quizzes[4],&myList[ctr].quizzes[5],&myList[ctr].quizzes[6],&myList[ctr].quizzes[7]);
            fgets(buf, sizeof(buf), read);  //reads third Line
            sscanf(buf, "%d,%d,%d", &myList[ctr].exams[0], &myList[ctr].exams[1],&myList[ctr].exams[2]);
            ctr++;  
        }
    }

    fclose(read);
    transfer(myList);

    return 0;       
}

该文件由三个主线组成。首先是学生编号,第二个是测验,第三行是考试。该文件如下所示:

1234567
12,16,14,9,8,15,0,3
40,40,40
1237890
13,12,18,11,7,15,10,8
40,35,50
1232098
10,11,15,10,0,15,6,7
36,42,40

1 个答案:

答案 0 :(得分:0)

我不记得哪个旧的编译器能够在没有原型的情况下运行函数。但我会请你使用:

void transfer(Student *);

并且还改变:

void transfer(Student myList[]);

void transfer(Student *myList)

另外,while中的第一个sscanf应该是:

sscanf(buf, "%d,", &myList[ctr].studentNumber);

您使用0而不是ctr。

修改 除了使用的代码或格式之外,请不要评论问题。