Я хочу, чтобы программа запрашивала ввод данных пользователем, брала число от 1 до 7 и выдавала правильный оператор WriteLine. Все компилируется нормально, но я получаю опцию WriteLine по умолчанию независимо от того, какое число я ввожу. Где я ошибаюсь?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace week4discussion
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter a number: ");
int userInput = Console.Read();
switch (userInput) {
case 1:
Console.WriteLine("Your selected course is IT 145");
break;
case 2:
Console.WriteLine("Your selected course is IT 200");
break;
case 3:
Console.WriteLine("Your selected course is IT 201");
break;
case 4:
Console.WriteLine("Your selected course is IT 270");
break;
case 5:
Console.WriteLine("Your selected course is IT 315");
break;
case 6:
Console.WriteLine("Your selected course is IT 328");
break;
case 7:
Console.WriteLine("Your selected course is IT 330");
break;
default:
Console.WriteLine("Please enter a number 1-7");
break;
}
}
}
}
Я сделал это и обнаружил, что возвращаемое число каким-то образом является значением любого числа, которое я ввожу, плюс 48. Например, когда я ввожу 1 в пользовательский ввод, мне возвращается 49, 2 — 50, а 3 — 51. Я понятия не имею, как это добавляет 48 ко всему этому.
Это связано с тем, что чтение возвращает ASCII-код нажатой клавиши, а не числовое значение, указанное на клавише. В любом случае использование Read — плохой выбор, потому что он возвращается сразу после нажатия первой клавиши. Теперь, если вам нужно получить 10 в качестве входных данных, вы получите только 1, а не 0
@TophHughes Я полагаю, что когда вы его отлаживаете и находите свой номер + 48, это потому, что он отображает значение ASCII для числового символа (например: «1» — это ASCII 49). Попробуйте ответить ниже, проанализировав ввод для целого числа или используя значения символов в ваших операторах case. Пример: case "1":, case "2":, case "3", ...
Ты нуждаешься в этом:
int userInput = Convert.ToInt32(Console.ReadLine());
Исправьте (если ввод является числом), но, пожалуйста, объясните, в чем ошибка. Теперь, если пользователь введет «это мой номер», ваш ответ приведет к сбою программы.
Сначала вам нужно проанализировать ввод от пользователя, чтобы определить, является ли он числом или нет. Вот скрипт С#: dotnetfiddle.net/NcM8GD
@JakeSteffen Пожалуйста, отредактируйте свой ответ с помощью tryparse.
Прочитайте документы о Консоль.Читать или добавьте Console.WriteLine(userInput);, чтобы узнать, что возвращается.