Gettig用户输入并存储/使用C#

时间:2019-01-19 20:42:36

标签: c# variables input

我已经在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;

}

2 个答案:

答案 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函数,但是对于所有其他原始数字类型(例如TryParselong等)也有一个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划分为0Mass1)。此外,您可能希望将Mass3的{​​{1}}值转换为int Mass3 = Mass1/Mass2;,例如int

我希望能对您有所帮助。