Reputation: 23
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);
}
}
}
}
}
}
Upvotes: 0
Views: 72
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
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