如何终止程序?

时间:2016-03-31 16:54:06

标签: c

我试图在用户输入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;
}

2 个答案:

答案 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;
}          

现在它会在最后一个学生输入标记时按预期退出循环