【问题标题】:How can I read data from file ? I can't fix it [closed]如何从文件中读取数据?我无法修复它[关闭]
【发布时间】:2019-05-08 15:29:41
【问题描述】:

我将学生信息记录到 txt 文件,但是当我想从文件中读取数据时 只需阅读第一行的信息。我还计算了学生的平均值,但是当我想读取平均值时它不起作用。

    FILE *fout;
fout = fopen("English Class.txt","w"); 

printf("Please enter student number of class : ");
scanf("%d", &x.classNum);

fprintf(fout, "Class Number : %d\n",x.classNum);

for(i=0; i<x.classNum; i++){

    printf("Please Enter %d.Student Name : ",i+1);
    scanf("%s",&x.Name);

    printf("Please Enter %d.Student Surname : ",i+1);
    scanf("%s",&x.Surname);

    printf("Please Enter %d.Student Number : ",i+1);
    scanf("%d",&x.StudentNumber);

    printf("Please Enter %d.Student Score : ",i+1);
    scanf("%d",&x.EnglishScore);

    x.total = x.total + x.EnglishScore;

    fprintf(fout, "\nStudent Name : %s %s Student Number : %d Student Score : %d\n", x.Name, x.Surname, x.StudentNumber, x.EnglishScore);
 }

x.average = x.total / x.classNum;

fprintf(fout, "\n\nClass Average is : %f", x.average);

fclose(fout);   

我从顶级代码获取学生记录

        FILE *fin;
    fin = fopen("English Class.txt","r");


    fscanf(fin, "Class Number : %d\nStudent Name : %s %s Student Number : %d Student Score : %d\n\nClass Average is : %f",&x.classNum, &x.Name, &x.Surname, &x.StudentNumber, &x.EnglishScore, &x.average);
    fclose(fin);            


    printf("Class Number : %d\n", x.classNum);

    for(i=0; i<x.classNum; i++){

    fscanf(fin, "\nStudent Name : %s %s Student Number : %d Student Score : %d\n\nClass Average is : %f", &x.Name, &x.Surname, &x.StudentNumber, &x.EnglishScore);
    fclose(fin);    

    printf("\nStudent Name : %s %s Student Number : %d Student Score : %d\n", x.Name, x.Surname, x.StudentNumber, x.EnglishScore);  

    }

    printf("\n\nClass Average is : %f", x.average);

【问题讨论】:

  • *scanf() 函数返回一个值,指示分配的数量。使用该值进行错误检查:if (fscanf(...) != EXPECTED_ASSIGNMENTS) /* report error or maybe... */ exit(EXIT_FAILURE);
  • 请出示minimal reproducible example 以及您阅读的文件的最小样本。你可以edit你的问题。
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及重现它所需的最短代码,其中包括输入文件,在问题本身。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建minimal reproducible example。

标签: c file structure


【解决方案1】:

到目前为止,您每次阅读后都会立即关闭file。

    fscanf(fin, "Class Number : %d\nStudent Name : %s %s Student Number : %d Student Score : %d\n\nClass Average is : %f",&x.classNum, &x.Name, &x.Surname, &x.StudentNumber, &x.EnglishScore, &x.average);

   fclose(fin)

然后您尝试使用相同的FILE 指针来读取导致未定义的行为。


仅在完成处理后关闭文件。

【讨论】:

  • 可能还有更多的错误......
  • @Jabberwocky 我同意,我认为这个错误应该在没有minimal reproducible example 的情况下突出显示。
猜你喜欢
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
相关资源
最近更新 更多