陷入有效= 0的while循环中,它没有通过scanf并继续要求输入。该程序旨在接受GPA的整数值,然后计算每个gpa的频率。
#include <stdio.h>
int main(void) {
int amount, i, count, valid;
int GPA[200], GPAFreq[4];
valid = 0;
i = 1;
count = 1;
GPA[1] = 0; GPA[6] = 0;
GPA[2] = 0; GPA[7] = 0;
GPA[3] = 0; GPA[8] = 0;
GPA[4] = 0; GPA[9] = 0;
GPA[5] = 0; GPA[10] = 0;
GPAFreq[1] = 0; GPAFreq[3] = 0;
GPAFreq[2] = 0; GPAFreq[4] = 0;
printf("Enter the number of students: ");
scanf("%d", &amount);
while ( i < (amount + 1))
{
i += 1;
while (valid == 0)
{
printf("%d", GPA[i]);
if ( (GPA[i] == 4) || (GPA[i] == 3) || (GPA[i] == 2) || (GPA[i] == 1) )
{
valid = 1;
}
else
{
printf("GPA of student # %d is: ", i);
scanf("%d", &GPA[i]);
}
}
count = 1;
while (count < 5)
{
if (GPA[i] == count)
{
GPAFreq[count] +=1;
}
}
}
count = 1;
while (count < 5)
{
printf("\nGPA %d --- %d student(s).", count, GPAFreq[count]);
count += 1;
}
return 0;
}
答案 0 :(得分:1)
当我执行它时,它不会卡在while(valid == 0)
循环上,它会卡在第一个while(count < 5)
中,因为你不会在这个循环内增加计数。
在这段代码中,还有一些其他东西会立即出现给我,我不妨指出。
您可以通过声明int array[10] = {0}
来自动将数组的所有元素设置为0。有几种方法可以做到这一点(包括for循环),但你不需要像第11-18行那样手动输入每一种方法
数组中的数组为0,因此您从0开始计数,而不是1
在访问之前,在while循环(第26行)的开头递增i。因此意味着实际使用的第一个索引是2(记住它应该是0)
如果您将学生人数限制在200人,则应确保用户未输入大于此数的学生。
编辑:
valid
循环之前将while(valid == 0)
重置为0(您也可以while(!valid)
顺便提一下)