首先这是家庭作业。我一直在努力摆脱错误,通常把代码搞得更糟,最后又回到原来的代码。如果你能给我指点方向(以我能理解的方式),我将非常感激。我不认为我们的老师真的希望我们能得到它,但我还是要尝试。我现在正在发帖,但会离开电脑一段时间,所以我不能马上回复,谢谢。

#include <stdio.h>

#define MAX 10

main () {
  int i;
  int num_students;
  float total;
  long id[MAX];                // Student ID
  short midterm[MAX];          // Midterm Grade
  short final[MAX];            // Final Grade
  float average[MAX];          // Average Grade
  float avg_average;           // Average of the averages
  float diff;                    // Student's average minus class average

  // The average grade is 60% final and 40% midterm
  // Compute the course grades, the average course grade,
  // and for each student, print out their id, midterm and final grades,
  // the average grade, and their difference

  i = 0;
  // The syntax of this while loop is correct
  while (scanf("%i %i %i",&id[i], &midterm[i], &final[i]) != EOF) {
    average[i] = midterm[i]*.4 + final[i]*.6;
    i++;
  }

  num_students = i;

  for (i = 0; i < num_students; i++) {
    total = total + average[i];
  }
  avg_average = total/num_students;

  printf("ID\tMidterm\tFinal\tAvg\tAvgAvg\tDiff\n");
  printf("---\t--------\t------\t----\t-------\t-----\n");
  for (i = 0; i < num_students; i++) {
    diff = avg_average - average[i];
    printf("%d\t", id[i]);
    printf("%i\t", midterm[i]);
    printf("%i\t", final[i]);
    printf("%f2.2\t", average[i]);
    printf("%f2.2\t",avg_average);
    printf("%f2.2\t",diff);

    printf("\n");
  }

这是我要传入的数据文件:
0 94 93个
18884个
2 99 79个
3 78 64个
4 66 83个
57890个
6 90 87个
7 23 18个
8 55 76个
9 48 26个
10 87 67个
11 97 89号
12 100 89个
138878个
14 67 78个
158776个
16 77 65个
17 83 87个
18 89 87个
我只是没有在任何类别中得到正确的输出。

最佳答案

还有一个问题。
scanf返回从标准输入或EOF成功转换的次数。
但是当你输入一个空行或者无效的输入时会发生什么呢?
例如,输入以下内容

"50 80 60" - this line OK
"garbage 3 7"  - scanf returns 2. 1st conversion fails. id[i] could contain anything.

您要做的是修改程序以检查scanf返回3或EOF,而不仅仅是EOF。
如果它没有返回任何一个,那么您需要打印出一个错误,再次请求输入。
既然是家庭作业,我就让你把它做完。

关于c - 修正ASSIGNMENT时出错。仍然在我的头上(更新的代码),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3756439/

10-11 00:26