我已经在C#中学习了一个多月,但我遇到了一些问题。
我想获得用户输入并将其存储到变量中,然后对其进行一些操作,然后获得答案,但是我什至无法得到它来打印任何内容,也无法让我写。有人可以告诉我我做错了什么以及如何解决吗?
{
Console.Write("Enter Mass1 ");
string Mass1 = Console.ReadLine();
Console.Write("Enter Lil Numbers ");
int LilNum = Console.ReadLine();
Console.Write("Enter Mass2 ");
int Mass2 = Console.ReadLine();
Console.Write("Enter Lil Numbers ");
int LilNum2 = Console.ReadLine();
Console.Write("Enter Distance between Mass1 & 2 ");
int distance = Console.ReadLine();
}
int Mass3 = Mass/Mass2;
}
答案 0 :(得分:0)
我已经重写了您的程序并添加了内联注释,这将有助于您了解做错了什么。
Console.Write("Enter Mass1 ");
int Mass1 = int.Parse(Console.ReadLine());
// Console.ReadLine() method returns the `string`
// hence you need to parse it to specific type before assigning it
Console.Write("Enter Lil Numbers ");
int LilNum = int.Parse(Console.ReadLine());
// same here
Console.Write("Enter Mass2 ");
int Mass2 = int.Parse(Console.ReadLine());
// same here
Console.Write("Enter Lil Numbers ");
int LilNum2 = int.Parse(Console.ReadLine());
// same here
Console.Write("Enter Distance between Mass1 & 2 ");
int distance = int.Parse(Console.ReadLine());
// You are using `Mass` which is not present
// `Mass1` was `string` type on which you can not do division
int Mass3 = Mass1 / Mass2;
希望这会有所帮助。
答案 1 :(得分:0)
首先,由于Console.ReadLine
函数返回了Console
,因此尝试直接从int
读到string
时应该会收到错误消息。
此外,您还需要利用要将字符串转换为的类型的TryParse
静态函数。
例如,使用您的代码,我们可以在用户输入无效的情况下循环播放,例如,如果用户使用"x"
函数为数字输入TryParse
:
string val;
int Mass1, LilNum, Mass2, LilNum2, distance;
do {
Console.Write("Enter Mass1 ");
val = Console.ReadLine();
} while (!int.TryParse(val, out Mass1));
do {
Console.Write("Enter Lil Numbers ");
val = Console.ReadLine();
} while (!int.TryParse(val, out LilNum));
do {
Console.Write("Enter Mass2 ");
val = Console.ReadLine();
} while (!int.TryParse(val, out Mass2));
do {
Console.Write("Enter Lil Numbers ");
val = Console.ReadLine();
} while (!int.TryParse(val, out LilNum2));
do {
Console.Write("Enter Distance between Mass1 & 2 ");
val = Console.ReadLine();
} while (!int.TryParse(val, out distance));
或者,您可以将此循环放入函数中,如下所示:
public static void ParseUserInput(string msg, out int outval)
{
string val;
do {
Console.Write(msg);
val = Console.ReadLine();
} while (!int.TryParse(val, out outval));
}
public static void Main()
{
int Mass1, LilNum, Mass2, LilNum2, distance;
ParseUserInput("Enter Mass1 ", out Mass1);
ParseUserInput("Enter Lil Numbers ", out LilNum);
ParseUserInput("Enter Mass2 ", out Mass2);
ParseUserInput("Enter Lil Numbers ", out LilNum2);
ParseUserInput("Enter Distance between Mass1 & 2 ", out distance);
Console.WriteLine("Mass 3: {0}", Mass1/Mass2);
}
此代码利用了int.TryParse
函数,但是对于所有其他原始数字类型(例如TryParse
,long
等)也有一个double
。如果字符串是无效的数值,则{1}}函数将返回TryParse
;如果解析成功,函数将返回false
;如果解析成功,则将值放入true
值中。
您还可以使用转换类型的out
函数,例如int.Parse
,但是,您需要考虑Parse
函数将抛出{ {1}},如果解析失败,例如:
Parse
请记住,您不能信任用户输入,必须验证输入的值在对程序有效的范围内。例如,您的Exception
不能是try {
Console.Write("Enter a number: ");
int val = int.Parse(Console.ReadLine());
Console.WriteLine("Number: {0}", val);
} catch (Exception ex) {
Console.WriteLine("There was an error parsing the number: {0}", ex);
}
的值,因为您将Mass2
划分为0
(Mass1
)。此外,您可能希望将Mass3
的{{1}}值转换为int Mass3 = Mass1/Mass2;
,例如int
我希望能对您有所帮助。