Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Антон Мынов Знаток (433), открыт 6 дней назад
Вот код, я пытаюсь сделать чтоб при вводе числа оно сначала проверяло можно ли парсить, выводило это в значение переменной bool и если можно то чтоб парсилось. Это надо чтоб не просто парсить, если так делать и будет введено не число будет ошибка.
 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();
}
}
5 ответов
Alex42ru Мудрец (13409) 6 дней назад
Библиотеки на клаву надо
Vare Lion Знаток (460) 6 дней назад
Тут есть несколько проблем и логических ошибок в вашем коде:

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);: Выводим спарсенное число, если парсинг прошел успешно.
Этот код сначала пытается распарсить введенную строку. Если это удается, выводится сообщение об успехе и число. Если нет, выводится сообщение об ошибке.
Vare LionЗнаток (460) 6 дней назад
Либо библиотеки или библиотеки на клаву)
Антон МыновЗнаток (433) 6 дней назад
спасибо, изучу код
Vare Lion Знаток (460) Антон Мынов, Пожалуйста)
Кирилл Искусственный Интеллект (118824) 6 дней назад
Коты - они вообще существа ленивые.
Зызя Гуру (2654) 6 дней назад
Заведи собачку, может она сработает.
Jurijus Zaksas Искусственный Интеллект (458546) 6 дней назад
Так если парсинг будет неудачным, исключение будет все равно. Не очень понятно, чего именно ты пытаешься добиться, что еще не реализовано.
Ну и использование switch вместо if - это несколько странно.
Антон МыновЗнаток (433) 3 дня назад
если использовать tryparse исключения не будет, а switch просто короче выглядит чем if
Похожие вопросы