我刚刚开始使用C#,正在制作这个非常简单的C#程序,根据输入的标记打印成绩。
这是我的计划:
class data
{
int marks;
public void input()
{
Console.WriteLine("Enter your marks");
marks = Convert.ToInt16(Console.ReadLine());
}
public void output()
{
if (marks >= 75)
{
Console.WriteLine("Merit");
}
else if (marks < 75)
{
Console.WriteLine("Distiction");
}
else if (marks < 65)
{
Console.WriteLine("Credit");
}
else if (marks < 55)
{
Console.WriteLine("Pass");
}
else Console.WriteLine("Fail");
}
}
}
这是主要的:
class Program
{
static void Main(string[] args)
{
data obj1 = new data();
obj1.input();
obj1.output();
Console.ReadLine();
}
}
}
问题是无论我给出什么输入,它都会继续输出“Distinction”作为等级。我做错了什么?
编辑 - 失败标记低于40
答案 0 :(得分:5)
您未能使用适当的范围;由于marks < 75
阻止位于marks < 65
阻止之前,并且marks <65
(依此类推)的所有情况也适用于marks < 75
,因此您的代码将始终停留在{{ 1}}然后输出marks < 75
。
没有看到明显的原因,它输出Distinction
以获得正确的高值,但是
答案 1 :(得分:2)
对于低于75的所有商标条目,它使第二条件成立,这就是为什么每次都能获得区别的原因。将输出功能更改为此
public void output()
{
if (marks >= 75)
{
Console.WriteLine("Merit");
}
else if (marks >= 65 && marks < 75)
{
Console.WriteLine("Distiction");
}
else if (marks >= 55 && marks < 65)
{
Console.WriteLine("Credit");
}
else if (marks >= 40 && marks < 55) // Here 40 is passing marks. You've set up of your own
{
Console.WriteLine("Pass");
}
else Console.WriteLine("Fail");
}
答案 2 :(得分:0)
你的问题是你的第二个if语句(标记&lt; 75)包括它下面的所有语句。例如,如果标记&lt; 75是正确的,那么该语句将运行,并且不会像标记那样检查其他语句&lt; 65或标记&lt; 55因为标记&lt; 75包括他们。你需要这样做:
if (marks >= 75){
Console.WriteLine("Merit");
}else if (marks < 55){
Console.WriteLine("Pass");
}else if (marks < 65){
Console.WriteLine("Credit");
}else if (marks < 75){
Console.WriteLine("Distiction");
}else
Console.WriteLine("Fail");
答案 3 :(得分:0)
我想这就是你所期望的:
public void output()
{
if (marks >= 75)
{
Console.WriteLine("Merit");
}
else if (marks < 55)
{
Console.WriteLine("Pass");
}
else if (marks < 65)
{
Console.WriteLine("Credit");
}
else if (marks < 75)
{
Console.WriteLine("Distiction");
}
else Console.WriteLine("Fail");
}
P.S。请以大写字母开始使用类和方法名称。
答案 4 :(得分:0)
我也很难解决你的逻辑问题 - 为了更好地理解你的意图,我会在反对票中受到打击。
但我认为,如果要求检查一个数字是否在“两个数字之间”,你可以构建一个IF来检查下边界。
修改 - 40以下失败
if (marks >= 75) Console.WriteLine("Merit");
else if (marks >= 65) Console.WriteLine("Distinction");
else if (marks >= 55) Console.WriteLine("Credit");
else if (marks >= 40) Console.WriteLine("Pass");
else Console.WriteLine("Fail");