Оператор switch возвращается к значению по умолчанию независимо от ввода пользователя?

Я хочу, чтобы программа запрашивала ввод данных пользователем, брала число от 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;

            }
        }
    }
}

Прочитайте документы о Консоль.Читать или добавьте Console.WriteLine(userInput);, чтобы узнать, что возвращается.

Steve 28.05.2019 20:40

Я сделал это и обнаружил, что возвращаемое число каким-то образом является значением любого числа, которое я ввожу, плюс 48. Например, когда я ввожу 1 в пользовательский ввод, мне возвращается 49, 2 — 50, а 3 — 51. Я понятия не имею, как это добавляет 48 ко всему этому.

Toph Hughes 28.05.2019 20:50

Это связано с тем, что чтение возвращает ASCII-код нажатой клавиши, а не числовое значение, указанное на клавише. В любом случае использование Read — плохой выбор, потому что он возвращается сразу после нажатия первой клавиши. Теперь, если вам нужно получить 10 в качестве входных данных, вы получите только 1, а не 0

Steve 28.05.2019 20:53

@TophHughes Я полагаю, что когда вы его отлаживаете и находите свой номер + 48, это потому, что он отображает значение ASCII для числового символа (например: «1» — это ASCII 49). Попробуйте ответить ниже, проанализировав ввод для целого числа или используя значения символов в ваших операторах case. Пример: case "1":, case "2":, case "3", ...

dvo 28.05.2019 20:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ты нуждаешься в этом:

 int userInput = Convert.ToInt32(Console.ReadLine());

Исправьте (если ввод является числом), но, пожалуйста, объясните, в чем ошибка. Теперь, если пользователь введет «это мой номер», ваш ответ приведет к сбою программы.

Steve 28.05.2019 20:42

Сначала вам нужно проанализировать ввод от пользователя, чтобы определить, является ли он числом или нет. Вот скрипт С#: dotnetfiddle.net/NcM8GD

Jake Steffen 28.05.2019 20:49

@JakeSteffen Пожалуйста, отредактируйте свой ответ с помощью tryparse.

Rishabh Kumar 28.05.2019 20:51

Другие вопросы по теме