我试图在用户输入1进入决策部分后终止程序,但即使在用户输入1后它仍然继续要求输入。我在代码中做错了什么或错过了什么?请帮助,我似乎没有弄到它有什么问题。
#include <stdio.h>
int main()
{
int H, N, mark, s, n, last;
/*Student Marks Input, Grade Output/Loop*/
do
{
printf("Please enter your marks:");
scanf("%i", &mark);
if(mark>100)
{
printf("Invalid Input\n");
printf("Re-enter your marks:");
scanf("%i",&mark);
}
if(mark>=80)
{ H++;
printf("You got a H\n");
}
else
if(mark>=70)
{
printf("You got a D\n");
}
else
if(mark>=60)
{
printf("You got a C\n");
}
else
if(mark>=50)
{
printf("You got a P\n");
}
else
if(mark<=49)
{
N++;
printf("You got an N\n");
}
/*Decisions*/
printf("Are you the last student?(Y=1/N=0):");
scanf("%i", &last);
if(last==0)
{
n++;
}
else if (last==1)
{
s++;
}
}
while(s>0);
/*Results*/
if(H>N)
printf("Good Results");
else
printf("Bad Results");
return 0;
}
答案 0 :(得分:0)
首先,您在代码中有未定义的行为,因为您对未初始化的变量进行了操作。
未初始化的本地变量(例如s
)具有不确定值,例如s++
会导致未定义的行为。变量s
不是唯一一个未初始化然后执行操作的变量。
然后,当您初始化s
时,请记住循环继续迭代while (s > 0)
,因此如果您将s
初始化为零,那么请执行s++
,这意味着s
1}} 将大于零,循环继续。
您应该初始化(我建议)s
为零,然后循环while (s == 0)
。
或者,你知道,只有break
离开循环:
if (last == 1)
break;
// No else, no special loop condition needed, loop can be infinite
答案 1 :(得分:0)
你的缩进使do ... while循环看起来像是一个无限循环。在得分之后你还有一个额外的近距离支架。这实际上使它成为一个无限循环。
#include <stdio.h>
int main()
{
int H, N, mark, s, n=0, last;
/*Student Marks Input, Grade Output/Loop*/
do
{
// processing
if(last==0)
{
n++;
}
else if (last==1)
{
s++;
}
} // This converts the do ... while into an infinite loop
while(s>0); // This is an invalid while since it never gets here
在开头将此更改为
#include <stdio.h>
int main()
{
int H, N, mark, last;
int s = 0;
int mark = 0;
/*Student Marks Input, Grade Output/Loop*/
while (s < 1) // First loop runs sinc s is initialized to 0.
{
// Get the entry for the next pass through the loop.
printf("Please enter your marks:");
scanf("%d", &mark);
// Perform your processing
/*Decisions*/
printf("Are you the last student?(Y=1/N=0):");
scanf("%i", &last);
if(last==0)
{
n++;
}
else if (last==1)
{
s++;
}
// This is the end of the while loop
}
/*Results*/
if(H>N)
printf("Good Results");
else
printf("Bad Results");
return 0;
}
现在它会在最后一个学生输入标记时按预期退出循环