Попытка проверить, есть ли пользовательский ввод - PullRequest
0 голосов
/ 04 мая 2020

Я читаю книгу, думая, как программист. Однако все сделано в C ++, и я делаю упражнения в C#. У меня проблемы с преобразованием раздела в c#. Я опубликую вопрос, код книги на c ++ и мою попытку в c#. Оператор if пуст, я изначально пытался использовать Readline, затем преобразовывать в char и теперь переключился на чтение его в виде строки, а затем преобразование в char.

ПРОБЛЕМА: ЧТЕНИЕ ЧИСЛА С ТРИ ИЛИ ЧЕТЫРЕХ ЦИФРАМИ , ДАЛЕЕ УПРОЩЕННОЕ

Напишите программу для чтения числовых символов и преобразования ее в целое число, используя только одну переменную char и две переменные типа int. Номер будет иметь три или четыре цифры.

cout << "Enter a three-digit or four-digit number: ";
char digitChar = cin.get();
 int threeDigitNumber = (digitChar - '0') * 100;
 int fourDigitNumber = (digitChar - '0') * 1000;
digitChar = cin.get();
threeDigitNumber += (digitChar - '0') * 10;
fourDigitNumber += (digitChar - '0') * 100;
digitChar = cin.get();
threeDigitNumber += (digitChar - '0');
fourDigitNumber += (digitChar - '0') * 10;
digitChar = cin.get();
if (digitChar == 10) {
cout << "Numbered entered: " << threeDigitNumber << "\n";
} else {
fourDigitNumber += (digitChar - '0');
cout << "Numbered entered: " << fourDigitNumber << "\n";
}

Мой код:

Console.WriteLine("Enter in your 3 or 4 digit number");
            string stringDigit = Console.ReadLine();

            char charDigit = char.Parse(stringDigit);


            //convert the char to an int and the correct place value
            int threeDigitNumber = (charDigit - '0') * 100; 
            int fourDigitNumber = (charDigit - '0') * 1000;

            stringDigit = Console.ReadLine();
            charDigit = char.Parse(stringDigit);

            threeDigitNumber += (charDigit - '0') * 10;
             fourDigitNumber += (charDigit - '0') * 100;

            stringDigit = Console.ReadLine();
            charDigit = char.Parse(stringDigit);

            threeDigitNumber += (charDigit - '0');
            fourDigitNumber += (charDigit - '0') * 10;

            stringDigit = Console.ReadLine();
            charDigit = char.Parse(stringDigit);

            //check if the number is a 3 or 4 digit number
            if ()//unsure what to check
            {
                Console.WriteLine("Numbered entered is: " + threeDigitNumber);
            }
            else
            {
                fourDigitNumber += (charDigit - '0');
                Console.WriteLine("Numbered entered is: " + fourDigitNumber);
            }

1 Ответ

0 голосов
/ 04 мая 2020

Я думаю, что близкий эквивалент был бы больше похож на это:

            Console.WriteLine("Enter in your 3 or 4 digit number");

            char charDigit = Console.ReadKey().KeyChar;


            //convert the char to an int and the correct place value
            int threeDigitNumber = (charDigit - '0') * 100;
            int fourDigitNumber = (charDigit - '0') * 1000;

            charDigit = Console.ReadKey().KeyChar;

            threeDigitNumber += (charDigit - '0') * 10;
            fourDigitNumber += (charDigit - '0') * 100;

            charDigit = Console.ReadKey().KeyChar;

            threeDigitNumber += (charDigit - '0');
            fourDigitNumber += (charDigit - '0') * 10;

            charDigit = Console.ReadKey().KeyChar;

            //check if the number is a 3 or 4 digit number
            if (charDigit == '\r') //you get a CR character on Enter
            {
                Console.WriteLine("Numbered entered is: " + threeDigitNumber);
            }
            else
            {
                fourDigitNumber += (charDigit - '0');
                Console.WriteLine("Numbered entered is: " + fourDigitNumber);
            }

Потому что Console.ReadKey().KeyChar получает для вас один символ. В вашем коде вы читаете всю строку.

...