我的任务是:
我写了以下程序:
int main()
{
int s, i, grade, total, gradenum, finalgrade;
printf("How many students?\n");
scanf("%d", &s);
i = 0;
do
{
printf("Enter grade. Enter x when done.");
scanf("%d", grade);
total = 0;
if (grade != 'x')
{
total = total + grade;
gradenum++;
}
else
{
finalgrade = total / gradenum;
printf("The final grade is %d", finalgrade);
i++;
}
}
while (i <= s);
return 0;
}
这个想法是你通过用户输入获得学生数量,然后do循环应该只重复那么多次。
但是当我编译程序时,我收到一条警告消息“未使用'总计'(据我所见,正在使用它!)。然后当我尝试运行该程序时,我陷入无限循环。
我做错了什么?
该类是C的简介,我们没有介绍cout,数组或类似的东西,所以我认为我不希望将它们用于此任务。仅循环(do,for,if / else)。
答案 0 :(得分:0)
我认为你可以使用
char grade;
scanf("%c",&grade);
然后比较。
答案 1 :(得分:0)
你有几个问题,在这里:
您使用gradenum
未初始化,出于同样的原因,您没有为每次迭代重置它,因此您的平均计算结果会出错。
您使用i
初始化0
,但一直持续到i <= s
,因此对于3名学生,您实际上循环了4次。
您错过了为学生收集个人成绩的循环。
scanf("%d", grade)
应为scanf("%d", &grade)
。
您将整数与字符混合,最简单的解决方法是输入-1
之类的东西来退出,而不是'x'
。
以下是修改后的版本:
#include <stdio.h>
int main()
{
int s, i, grade, total, gradenum, finalgrade;
printf("How many students?\n");
scanf("%d", &s);
i = 1;
do
{
printf("Enter grades for student %d\n", i);
gradenum = 0;
grade = 0;
total = 0;
while ( grade != -1 ) {
printf("Enter grade. Enter -1 when done.\n");
scanf("%d", &grade);
if (grade != -1)
{
total = total + grade;
gradenum++;
}
else
{
finalgrade = total / gradenum;
printf("The final grade is %d\n", finalgrade);
i++;
}
}
}
while (i <= s);
return 0;
}
输出:
paul@MacBook:~/Documents/src/scratch$ ./grades
How many students?
3
Enter grades for student 1
Enter grade. Enter -1 when done.
77
Enter grade. Enter -1 when done.
68
Enter grade. Enter -1 when done.
71
Enter grade. Enter -1 when done.
-1
The final grade is 72
Enter grades for student 2
Enter grade. Enter -1 when done.
55
Enter grade. Enter -1 when done.
58
Enter grade. Enter -1 when done.
70
Enter grade. Enter -1 when done.
-1
The final grade is 61
Enter grades for student 3
Enter grade. Enter -1 when done.
22
Enter grade. Enter -1 when done.
25
Enter grade. Enter -1 when done.
30
Enter grade. Enter -1 when done.
-1
The final grade is 25
paul@MacBook:~/Documents/src/scratch$
看起来像你想要的。