除了 C# 中的数学,我不能为其他科目取分

I can't take marks for other subjects except for maths in C#

我在下面有一个 C# 代码。此代码从用户那里获取姓名、数学、计算机、科学、环境和历史的分数,并打印总数和百分比。这段代码的问题在于它只取数学分数。并打印输出。但它从数学中获取数字并将该数字分配给所有其他科目。请帮我解决这个问题。代码如下:

using System;

 namespace test
 {
class Program
{
    public static void Main(string[] args)
    {
        int total = 500;
        Console.WriteLine("Hello This is my first C# Program. Hope you like it");
        Console.Write("Enter a name: ");
        String name = Console.ReadLine();
        Console.WriteLine($"Hello {name}");
        Console.Write("Enter the marks for Maths: ");
        int mathsMarks = Console.Read();
        Console.Write("Enter the marks for Science: ");
        int scienceMarks = Console.Read();
        Console.Write("Enter the marks for Computer: ");
        int computerMarks = Console.Read();
        Console.Write("Enter the marks for Environment: ");
        int environmentMarks = Console.Read();
        Console.Write("Enter the marks for Social: ");
        int socialMarks = Console.Read();
        int totalMarks = mathsMarks + scienceMarks + computerMarks + environmentMarks + socialMarks;
        Console.WriteLine($"The total marks is {totalMarks}");
        Console.WriteLine($"The percentage is %{(totalMarks/total)*100}");
    }

}
  }

Console.Read 不是 return 输入的数字(如果有的话),而是你输入的下一个字符的 ascii 码。每个字符只是一个数字。因此输入字符 a 将 return 97,这是 a.

的 ASCII 码

来自 Read 的文档:

Reads the next character from the standard input stream

因此只读取了一个字符。

你想要的是:

int mark = int.Parse(Console.ReadLine());

或避免出现类似 "this is not a number":

的情况
int mark;
if(!int.TryParse(Console.ReadLine(), out mark) throw new ArgumentException("no valid number");

此外,将一个整数除以一个整数也总是 return 一个(截断的)整数。例如。 3 / 7 结果为 0

为避免这种情况,您必须使用一些浮点数,例如浮动或双精度:

double percentage = (double) totalMarks / marks * 100;

您可以看出,您阅读名字的方式与阅读考试分数的方式之间存在差异。 console.read 不会 return 您期望的 int..它一次读取 1 个字符,直到您按下 Enter 键。

因此请更改您读取用户输入的方式 - 也许使用 console.ReadLine()。这会将 return 数据作为字符串,然后您可以探索使用 int.TryParse() 将其安全地转换为 int。

此外,您的最终除法可能总是 return 0,因为整数之间的除法会忽略分数...所以还要查找 doublefloat 类型。