除了 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,因为整数之间的除法会忽略分数...所以还要查找 double
和 float
类型。
我在下面有一个 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
.
来自 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,因为整数之间的除法会忽略分数...所以还要查找 double
和 float
类型。