C# Неверное значение хранится в переменной - PullRequest
2 голосов
/ 13 февраля 2020

Я довольно новичок в программировании, поэтому проявите некоторую милость;) Я пытаюсь создать программу, которая может решать уравнения и задавать градиент и так далее в c#, поэтому я могу постепенно усложнять ее. Проблема в том, что, похоже, неверное значение из моего ввода, когда я пытался начать его строить.

Консоль: Заданное значение для "a": 9 Вывод: 57

Мой код:

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Input an linear Eqasion in the following Pattern -- a * x + b");
            Console.Write("Given value for \"a\":");
            decimal aValue;
            aValue = Console.Read();
            Console.Write(aValue);
        }
    }
}

Ответы [ 2 ]

5 голосов
/ 13 февраля 2020

Console.Read() возвращает int, но не так, как вы думаете. Он возвращает значение цифры c напечатанного символа, , а не интуитивно понятную человеку интерпретацию символа, который по совпадению оказывается числом. Рассмотрим, например, что будет возвращено, если вы введете букву или любой другой не числовой символ c.

А что такое числовое значение c (десятичное) для символа '9'? 57 is.

Звучит так, будто вы хотите прочитать строку, а не символ. Например:

string aValue;
aValue = Console.ReadLine();
Console.Write(aValue);

Помните, что вам нужно нажать клавишу возврата, чтобы отправить строку в приложение.

Если вам позже потребуется, чтобы значение было цифрой c, вы все равно захотите ввести строку, но захотите ее проанализировать. Например:

string aValue;
aValue = Console.ReadLine();
if (decimal.TryParse(aValue, out decimal numericValue)
{
    Console.Write(numericValue);
}
else
{
    // The value could not be parsed as a decimal, handle this case as needed
}
4 голосов
/ 13 февраля 2020

Console.Read возвращает код символа, введенный в командной строке в этом сценарии. Код символа ASCII 9 равен 57. Если вам нужен ввод цифр c, вам лучше использовать Console.ReadLine с Decimal.Parse (или еще лучше Decimal.TryParse)

Стоит также отметить, что Console.Read возвращает только по одному символу за раз , что означает, что для любых вводов после 1 di git вам потребуется специальная обработка. Я настоятельно рекомендую использовать ReadLine и анализировать строку для обработки, преобразуя коды символов в числа, которые они представляют.

...