C#中的嵌套if语句

nested if statement in C#

我得到了命令提示符,并得到了 Bad Score 的正确答案,但是如果我尝试输入一个好成绩 (800),它什么也没做。任何帮助将不胜感激。我是新手,所以很抱歉我的编码器不漂亮。

        //variables
        string firstName, lastName, grades = "";
        double points = 0, percent = 0;


        //Greeting
        Console.WriteLine("The purpose of this program is to allow the teacher to calculate the percentage and final grade for students in their class.");

        //Display and Inputs
        Console.WriteLine("\n\nPlease enter the students first name.");
        firstName = Console.ReadLine();

        Console.WriteLine("\n\nPlease enter the students last name.");
        lastName = Console.ReadLine();

        Console.WriteLine("\n\nPlease enter the points that the student received.\n\n");
        points = Convert.ToDouble(Console.ReadLine());

        //Display after points are entered
        if (points < 0 || points > 1000 ) 
        {
            Console.WriteLine("Bad Score!");
        }
        else 
        {
            percent = points / 1000;
            if (percent >= .9)
            {
                grades = "A";
            }
            else if (percent >= .8)
            {
                grades = "B";
            }
            if (percent >= .7)
            {
                grades = "C";
            }
            else if (percent >= .6)
            {
                grades = "D";
            }
            if (percent >= .0)
            {
                grades = "F";
            }
            else
            {
                 Console.WriteLine("WRONG!!");
            }
        }               
        grades = Console.ReadLine();

        //Outputs
        Console.WriteLine(firstName); 
        Console.WriteLine(lastName);
        Console.WriteLine(points);
        Console.WriteLine(percent.ToString("P"));
        Console.WriteLine("so they made an" + grades);

        //Closing statement
        Console.WriteLine("Goodbye");
        Environment.Exit(1);
    }
}

}

您获得 grades 变量正确性。但是在 ifs 语句的末尾,您要覆盖它的值,所以只需删除这一行:

grades = Console.ReadLine();

PS:您还可以将所有 ifs 语句与 else if

链接起来

你有一堆问题

  1. 您在 'C' 和 'F' 分支之前缺少 else。目前,所有正成绩将变为 'F's

    else if (percent >= .7)
    {
        grades = "C";
    }
    

再一次

    else if (percent >= .0)
    {
        grades = "F";
    }
  1. 然后您将用此行覆盖您计算的成绩

 grades = Console.ReadLine();

我相信你可能有意:

Console.WriteLine(grades);
  1. 您的应用程序将在计算后退出。我建议在末尾添加 Console.ReadLine 或类似内容,以允许用户查看结果

你的pgms乍一看有两个问题

  1. 你的if..else里面写错了else应该是

    else { percent = points / 1000; if (percent >= .9) { grades = "A"; } else if (percent >= .8) { grades = "B"; } else if (percent >= .7) { grades = "C"; } else if (percent >= .6) { grades = "D"; } else if (percent >= .0) { grades = "F"; } else { Console.WriteLine("WRONG!!"); } }

你在检查 percent >= 0.7 和 percent >=.0 时是否遗漏了其他信息 假设您输入了 800,那么百分比将为 0.8,那么条件 if percent >=.08 将为 true 并且 grade ="B" 并且由于 percent >= 0.7 没有其他它也将通过并且 grade 将变为 "c" 最后在检查 percent >= .0 时没有 else 所以它也会通过并且等级将变为 "F" 所以在所有情况下都需要 else。所以最后,无论正百分比是多少,由于缺少 else.. 在 if 条件下

,成绩将是 "F"
  1. 你应该删除 grade = Consolde.ReadLine(); 因为它会覆盖你的成绩。
  1. 假设您输入

名字 - Puneet 姓氏 - Chawla 输入学生获得的分数 - 800 10

那么答案是

普尼特 乔拉 800 80.00 % 所以他们做了an10 再见

  1. 当此条件为假时,如果 (points < 0 || points > 1000) 那么您将根据我认为的百分比给出评分,您不需要再次从用户那里获得评分。

  2. 在某些情况下,可能会出现错误的输出,因为你设置了 错误 - if,elseif, if,elseif,if then else 正确 - if,elseif,elseif,elseif,elseif then else.