我的C#grading程序不断输出相同的结果

我的C#grading程序不断输出相同的结果,c#,.net,visual-studio,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() {

我刚开始写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");


    }
}
}
问题是无论我输入什么,它都会不断输出“区别”作为分数。我做错了什么


编辑-失败分数低于40

您未能使用正确的范围;由于
标记<75
块位于
标记<65
块之前,并且对于
标记的所有情况,您都没有使用正确的范围;由于
标记<75
块位于
标记<65
块之前,并且对于
标记的所有情况,您的问题是您的第二个if语句(标记<75)包括它下面的所有语句。例如,如果marks<75是正确的,那么该语句将运行,并且不会检查像marks<65或marks<55这样的其他语句,因为marks<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");
if(标记>=75){
Console.WriteLine(“优点”);
}否则,如果(分数<55){
控制台。写入线(“通过”);
}否则,如果(标记<65){
控制台。书面形式(“信用”);
}否则如果(分数<75){
控制台。写线(“区分”);
}否则
控制台写入线(“失败”);

您的问题是,您的第二个if语句(标记<75)包含它下面的所有语句。例如,如果marks<75是正确的,那么该语句将运行,并且不会检查像marks<65或marks<55这样的其他语句,因为marks<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");
if(标记>=75){
Console.WriteLine(“优点”);
}否则,如果(分数<55){
控制台。写入线(“通过”);
}否则,如果(标记<65){
控制台。书面形式(“信用”);
}否则如果(分数<75){
控制台。写线(“区分”);
}否则
控制台写入线(“失败”);

我想这正是您所期望的:

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");
}
public void输出()
{
如果(标记>=75)
{
Console.WriteLine(“优点”);
}
否则,如果(分数<55)
{
控制台。写入线(“通过”);
}
否则,如果(标记<65)
{
控制台。书面形式(“信用”);
}
否则如果(分数<75)
{
控制台。写线(“区分”);
}
else控制台。WriteLine(“失败”);
}

另外,请以大写字母开头类和方法名称。

我想这就是您所期望的:

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");
}
public void输出()
{
如果(标记>=75)
{
Console.WriteLine(“优点”);
}
否则,如果(分数<55)
{
控制台。写入线(“通过”);
}
否则,如果(标记<65)
{
控制台。书面形式(“信用”);
}
否则如果(分数<75)
{
控制台。写线(“区分”);
}
else控制台。WriteLine(“失败”);
}

另外,请以大写字母开头类和方法名称。

对于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");
    }
public void输出()
{
如果(标记>=75)
{
Console.WriteLine(“优点”);
}
否则如果(标记>=65和标记<75)
{
控制台。写线(“区分”);
}
否则如果(标记>=55和标记<65)
{
控制台。书面形式(“信用”);
}
else if(marks>=40&&marks<55)//这里40是及格分数。您已经设置了自己的
{
控制台。写入线(“通过”);
}
else控制台。WriteLine(“失败”);
}

对于所有低于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");
    }
public void输出()
{
如果(标记>=75)
{
Console.WriteLine(“优点”);
}
否则如果(标记>=65和标记<75)
{
控制台。写线(“区分”);
}
否则如果(标记>=55和标记<65)
{
控制台。书面形式(“信用”);
}
else if(marks>=40&&marks<55)//这里40是及格分数。您已经设置了自己的
{
控制台。写入线(“通过”);
}
else控制台。WriteLine(“失败”);
}

我也很难解决你的逻辑问题——我会投反对票,只是为了更好地理解你的意图

但我认为,如果让你检查一个数字是否位于“两个数字之间”,你可以构造一个只检查下边界的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");

我也很难解决你的逻辑问题——我会投反对票,只是为了更好地理解你的意图

但我认为,如果让你检查一个数字是否位于“两个数字之间”,你可以构造一个只检查下边界的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");

你试过调试程序吗?如果一个数字小于55,它肯定也小于75,这是以前检查过的。你的if-else逻辑似乎有问题。你的意思是75或以上没有返回
优点
?由于ifs声明的安排,下面的所有内容都将返回差异。所有不大于或等于75的都将小于75,而所有其他if语句都没有任何意义您的逻辑是错误的。前两个条件将覆盖
标记
的所有可能值。您试过调试程序吗?如果数字小于55,它肯定也小于75,这是以前检查过的。您的if-else逻辑似乎有问题。您的意思是75或以上没有返回
优点
?由于ifs声明的安排,下面的所有内容都将返回差异。所有不大于或等于75的都将小于75,而所有其他if语句都没有任何意义您的逻辑是错误的。前两个条件将覆盖
标记
的所有可能值。可能是因为转换失败。何绍