我的C#grading程序不断输出相同的结果
我刚开始写C#,正在制作一个非常简单的C#程序,根据输入的分数打印分数 以下是我的节目:我的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() {
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语句都没有任何意义您的逻辑是错误的。前两个条件将覆盖标记
的所有可能值。可能是因为转换失败。何绍