我的C#评分程序继续输出相同的结果

时间:2017-07-05 15:07:10

标签: c# .net visual-studio

我刚刚开始使用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

5 个答案:

答案 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");