对于循环在C中无休止地重复



从我查看的所有内容来看,我似乎没有发现代码有任何问题。

int main()
{   
double honorpoints,totalhp = 0,totalcredits = 0;
int crpassed=0,clpassed = 0, count;
float GPA,credits;
char classx,grade;
printf("How many classes did you take in the semester: ");
scanf("%d", &count);
for(int i = 0; i < count; i++)
{ 
printf("Enter a Class: n");
scanf("%s", &classx);
printf("Enter the number of credits: ");
scanf("%f",&credits);
totalcredits = totalcredits + credits;
printf("Enter your grade: ");
scanf("%s",&grade);
if (grade == 'A')
{
honorpoints = credits * 4;
crpassed = crpassed + credits;
clpassed = clpassed + 1;
}
else if (grade == 'B')
{
honorpoints = 3 * credits;
crpassed = crpassed + credits;
clpassed = clpassed + 1;
}
else if (grade == 'C')
{
honorpoints = 2 * credits;
crpassed = crpassed + credits;
clpassed = clpassed + 1;
}
else if (grade == 'D')
{
honorpoints = 1 * credits;
crpassed = crpassed + credits;
clpassed = clpassed + 1;
}
else
honorpoints=0;
totalhp = totalhp + honorpoints;
}

当要求上课时,它只是一次又一次地继续。它确实会遍历循环中的所有内容,但当达到"计数"时,它不会停止——它只是不断地询问课程和成绩。我对使用C相对较新,所以如果这是一个明显的语法错误或其他什么,请原谅我,但即使在查看其他线程时,我也找不到我的问题。

一些scanf调用正在损坏内存,从而导致未定义的行为。classxgrade都是单个字符:

char classx,grade;

因此,以下scanf调用无法正常工作:

scanf("%s", &classx);
scanf("%s", &grade);

如果这些值是单个字符,则可以使用%c作为scanf格式。否则,如果要读取字符串,则需要将它们声明为数组,并在不获取地址的情况下传递它们。在这种情况下,不要忘记为终止的null字符添加一个字符。

在任何一种情况下,您都可能希望更改格式字符串,以便它们使用空白(您可以在格式字符串前面加一个空格来实现这一点(。

最新更新