Top.Mail.Ru
Ответы

В C# не работает кот

Вот код, я пытаюсь сделать чтоб при вводе числа оно сначала проверяло можно ли парсить, выводило это в значение переменной bool и если можно то чтоб парсилось. Это надо чтоб не просто парсить, если так делать и будет введено не число будет ошибка.

1234567891011121314151617181920
 using System; 
public class ConsoleApp1 
{ 
    public static void Main(string[] args) { 
        Console.WriteLine("Введите первое число"); 
        string firstline = Console.ReadLine(); 
        int firstnum = int.TryParse(firstline, out bool firstnumcanbeparsed); 
        Console.WriteLine(firstnumcanbeparsed); 
        switch (firstnumcanbeparsed) 
        { 
            case true: 
                firstnum = int.Parse(firstline); 
                break; 
            case false: 
                Console.WriteLine("Неверный ввод"); 
                break; 
        } 
        Console.ReadKey(); 
    } 
} 
По дате
По рейтингу
Аватар пользователя
Ученик

Тут есть несколько проблем и логических ошибок в вашем коде:

int.TryParse() возвращает bool, а не int: Метод TryParse возвращает true, если парсинг прошел успешно, и false в противном случае. Он не возвращает число. Число сохраняется в переменной, переданной через out.

Неверный тип переменной для результата TryParse(): Результат TryParse должен быть сохранен в bool, в вашем коде вы пытаетесь сохранить bool в int. Это вызовет ошибку компиляции.

Неправильное использование switch: switch в данном случае не нужен. Лучше использовать if-else. switch предназначен для сравнения переменной с набором константных значений, а здесь вам нужно просто проверить значение bool.

Неинициализированная переменная firstnum: Если парсинг не удался (firstnumcanbeparsed будет false), то переменная firstnum не будет инициализирована и будет содержать мусор. Лучше инициализировать ее перед использованием.

Исправленный код:

using System;

public class ConsoleApp1
{
public static void Main(string[] args)
{
Console.WriteLine("Введите первое число");
string firstline = Console.ReadLine();
int firstnum = 0; // Инициализируем firstnum
bool firstnumcanbeparsed = int.TryParse(firstline, out firstnum); // Получаем результат TryParse в bool, а число в firstnum

if (firstnumcanbeparsed)
{
Console.WriteLine("Число успешно спаршено: " + firstnum);
}
else
{
Console.WriteLine("Неверный ввод");
}

Console.ReadKey();
}
}

csharp
Объяснение изменений:

int.TryParse(firstline, out firstnum): Мы вызываем TryParse. Результат (успех или неудача) сохраняется в переменной firstnumcanbeparsed (типа bool). Если парсинг удался, в переменную firstnum записывается полученное число.
if (firstnumcanbeparsed): Проверяем, был ли парсинг успешным.
firstnum = 0;: Инициализация firstnum перед использованием. Это хорошая практика, чтобы избежать неопределенного поведения, если парсинг не удастся. В данном случае, если парсинг не удастся, firstnum сохранит свое начальное значение, которое в дальнейшем не используется.
Console.WriteLine("Число успешно спаршено: " + firstnum);: Выводим спарсенное число, если парсинг прошел успешно.
Этот код сначала пытается распарсить введенную строку. Если это удается, выводится сообщение об успехе и число. Если нет, выводится сообщение об ошибке.

Аватар пользователя
Ученик

Либо библиотеки или библиотеки на клаву)

Аватар пользователя
Ученик

спасибо, изучу код

Аватар пользователя
Искусственный интеллект

Так если парсинг будет неудачным, исключение будет все равно. Не очень понятно, чего именно ты пытаешься добиться, что еще не реализовано.
Ну и использование switch вместо if - это несколько странно.

Аватар пользователя
Ученик

если использовать tryparse исключения не будет, а switch просто короче выглядит чем if

Аватар пользователя
Мастер

Заведи собачку, может она сработает.

Аватар пользователя
Оракул

Коты - они вообще существа ленивые.

Аватар пользователя
Ученик

bruh

Аватар пользователя
Гуру

Библиотеки на клаву надо



Видео по теме