Danny
Danny

Reputation: 23

No Notified Errors But The Code Doesn't Perform As Instructed

Still in the early beginning stages of constructing various problems that can be solved with if-statements. One in particular that I am solving right now is a grading system in which the user inputs a number grade and the output is given showing their corresponding letter grade. There are no errors but it doesn't output the corresponding letter grade from my input.

            string goodGrade = "A";
            string okGrade = "B";
            string fairGrade = "C";
            string passGrade = "D";
            string failGrade = "F";
            string perfectGrade = "A+";
            int minGrade = 0;
            int maxGrade = 100;
            string inputLetterGrade;
            int inputNumberGrade;
            int studentA, studentB, studentC, studentD, studentE;
            int averageNumberGrade;
            string averageLetterGrade;
            studentA = 95;
            studentB = 84;
            studentC = 36;
            studentD = 72;
            studentE = 51;

            Console.Write("Insert Number Grade: ");
            inputNumberGrade = Convert.ToInt32(Console.ReadLine());

            if (inputNumberGrade == maxGrade) {
                Console.WriteLine("perfect you got an {0}", perfectGrade);

                if (inputNumberGrade <= 99 || inputNumberGrade >= 80)
                {
                    Console.WriteLine($"You got an {goodGrade}");

                    if (inputNumberGrade <= 79 || inputNumberGrade >= 70)
                    {
                        Console.WriteLine($"You got a {okGrade}");

                        if (inputNumberGrade <= 69 || inputNumberGrade >= 60)
                        {
                            Console.WriteLine($"You got a {fairGrade}");

                            if (inputNumberGrade <= 59 || inputNumberGrade >= 50)
                            {
                                Console.WriteLine("Poor performance, you got a {0}", passGrade);

                                if (inputNumberGrade >= 40 || inputNumberGrade <= 49)
                                {
                                    Console.WriteLine($"You fail, you got an {failGrade}");
                                }

                                else if (inputNumberGrade < 40 && inputNumberGrade != 0)
                                {
                                    Console.WriteLine($"You fail, you got an {failGrade}");
                                }

                                if ((inputNumberGrade != 0) == (inputNumberGrade == maxGrade))
                                {
                                    //Re-enter score to reflect whether or not the end-result is a positive or negative letter grade
                                    Console.Write("Re-enter Score: ");
                                    GetInputNumberGrade(inputNumberGrade);


                                }
                            }
                        }
                    }
                }

            }

Console Output Image

Upvotes: 0

Views: 72

Answers (2)

sachin soni
sachin soni

Reputation: 541

Fixes: Instead of writing nested if you have to write else if, condition: inputNumberGrade <= 99 || inputNumberGrade >= 80 in first 'if' block is always true so change it with && and lastly make the console wait for a key to press by writing Console.ReadKey(). Hope this works.

if (inputNumberGrade == maxGrade)
{
    Console.WriteLine("perfect you got an {0}", perfectGrade);
}
else if (inputNumberGrade <= 99 && inputNumberGrade >= 80)
{
    Console.WriteLine($"You got an {goodGrade}");
}
else if (inputNumberGrade <= 79 && inputNumberGrade >= 70)
{
    Console.WriteLine($"You got a {okGrade}");
}
else if (inputNumberGrade <= 69 && inputNumberGrade >= 60)
{
    Console.WriteLine($"You got a {fairGrade}");
}
else if (inputNumberGrade <= 59 && inputNumberGrade >= 50)
{
    Console.WriteLine("Poor performance, you got a {0}", passGrade);

}
else if (inputNumberGrade >= 40 && inputNumberGrade <= 49)
{
    Console.WriteLine($"You fail, you got an {failGrade}");
}

else if (inputNumberGrade < 40 && inputNumberGrade != 0)
{
    Console.WriteLine($"You fail, you got an {failGrade}");
}

else if ((inputNumberGrade != 0) == (inputNumberGrade == maxGrade))
{
    //Re-enter score to reflect whether or not the end-result is a positive or negative letter grade
    Console.Write("Re-enter Score: ");
    GetInputNumberGrade(inputNumberGrade);
}
Console.ReadKey();

Upvotes: 3

Babak Naffas
Babak Naffas

Reputation: 12561

You are nesting your if blocks instead of defining them in else if blocks that should be calculated as follow up tests.

Currently, you have set up your non-perfect store tests as part of the block executed when if (inputNumberGrade == maxGrade) is true. You want something more like

if (inputNumberGrade == maxGrade) {
    Console.WriteLine("perfect you got an {0}", perfectGrade);
}
else if (inputNumberGrade <= 99 || inputNumberGrade >= 80) {
  ...
}

Upvotes: 1

Related Questions