Получить пользовательский ввод и сохранить его / используя его c # - PullRequest
0 голосов
/ 19 января 2019

Я учусь чуть больше месяца на 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 голосов
/ 20 января 2019

Во-первых, вы должны получить сообщение об ошибке при попытке чтения напрямую из Console в int, так как функция Console.ReadLine возвращает string.

* 1008.* Кроме того, вы захотите использовать 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 и т. Д. Функция TryParse вернетfalse, если строка является недопустимым числовым значением, и true, если анализ выполнен успешно;если анализ завершится успешно, значение будет помещено в значение out.

Вы также можете использовать функцию Parse типа, который вы конвертируете, например int.Parse,однако вам нужно будет принять во внимание, что функция 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 (int Mass3 = Mass1/Mass2;).Кроме того, вы, вероятно, захотите преобразовать значения int в float для вашего Mass3, например, float Mass3 = (float)Mass1/Mass2;

Я надеюсь, что это может помочь.

0 голосов
/ 19 января 2019

Я переписал вашу программу и добавил встроенные комментарии, которые помогут вам понять, что вы сделали не так.

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;

надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...