Как решить проблему CS0161 в C#?
Я новичок в C# и недавно начал изучать функции. Мне надо сделать программу которая запрашивает числа, знак и выполняет действие (калькулятор короче). Но я столкнулся с проблемой, вот как она звучит:
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка CS0161 ‘»Program.Nikita(int, int, char)»: не все пути к коду возвращают значение.
вот код программы:
public static int Nikita(int a, int b, char d) < switch (d) < case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': return a / b; default: Console.WriteLine("Ошибка"); break; >//return a - b; > static void Main(string[] args) < < Console.Write("вевдите первое число: "); int am = (int)Convert.ToInt64(Console.ReadLine()); Console.Write("введите знак: "); char dm = Convert.ToChar(Console.ReadLine()); Console.Write("введите второе число: "); int bm = (int)Convert.ToInt64(Console.ReadLine()); int resault = Nikita(am, bm, dm); Console.WriteLine(am); Console.WriteLine(bm); Console.WriteLine(dm); Console.WriteLine(resault); >> > >
- Вопрос задан более трёх лет назад
- 2049 просмотров
1 комментарий
Простой 1 комментарий
Владимир Коротенко @firedragon
Никита кстати да универсальный совет. Пользуйтесь английскими версиями и просто ищите ошибку которую получили.
Как правило 1-2 ссылка это ваше решение.
Тот же хром кстати предлагает автоматический перевод, на удивление не плохой. Можно по диагонали посмотреть и потом переключиться на английский понять все тонкости.
Решения вопроса 2
Ну вам даже на русском пишут (кстати переключите на английский. И код в тег код оберните).
Что должна вернуть функция Nikita, если я в нее передам третим параметром ‘q’, например?
Крч функция с возвращаемым параметром должна возвращать значение ВСЕГДА. Или кидать эксепшн.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
В секции default тоже должен присутствовать return. Об этом и говорит текст ошибки «не все пути к коду возвращают значение»
default: Console.WriteLine("Ошибка"); return значение_при_ошибке; break;
Ошибка CS0161 C#
Скорее всего проблема не в этом куске коде, а в целом методе — он не возвращает значение. Если же это весь отрывок кода — просто за цыклом кинь ошибку: «throw new Exception(«В цыкле что-то пошло не так и последний элемент не найден»);»
2 ноя 2020 в 11:04
2 ноя 2020 в 12:43
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Можно бросить исключение (которое не будет выброшено никогда), чтобы успокоить компилятор.
for(int i = 0; i < X; i++) < // Код if(i == X - 1) < return Value; >> throw new Exception("Вот сейчас очень неожиданно было");
Отслеживать
ответ дан 2 ноя 2020 в 16:41
47.7k 5 5 золотых знаков 22 22 серебряных знака 57 57 бронзовых знаков
Честно говоря, непонятно, в чём вообще смысл данного куска кода. Он совершенно равнозначен такому коду (если вы не меняете i и/или X внутри цикла, что было бы очень плохим стилем программирования), при этом компилятор ругаться не будет и читается такой код легче:
for(int i = 0; i < X; i++) < // Код >return Value;
Но в общем случае компилятор не обязан знать, что у вас будет происходить в процессе работы программы, он просто видит, что если if не сработает, то из функции ничего не вернётся, а поскольку C# строго типизированный язык, вы не можете в одной ветке кода что-то вернуть, а в другой ничего не вернуть. (Хотя, например, язык Python такое допускает, в этом случае в нём вернётся None , но он и не язык со строгой типизацией.)
Так что вам в любом случае надо сделать так, чтобы все ветки кода возвращали значение (либо бросали исключение).
Не могу компилировать программу по ошибке CS0161 (x2)
Возникла проблема с компилированием программы, что мне надо дописать чтоб ошибка пропала? Подскажите пожалуйста. ( не знаю потому что надо кое что изменить в программе а тут ошибка ) dnSpy used
Лучший ответ
return 0;
Остальные ответы
Там где в методах объявлен возвращаемый тип отличный от void, требуется вернуть объект объявленного типа, либо типа, который можно неявно привести к объявленному без потери точности. Для этого используется инструкция return
Похожие вопросы
Ошибка: CS0161 . Не все пути к коду возвращают значение
На экзамене три студента выпускают одну и ту же задачу независимо друг от друга. У каждого студента есть своя вероятность решения задачи. Смоделируйте процесс решения задачи: каждый студент рассматривает задачу по очереди, моделирование завершается, когда один из студентов решает задачу. Когда решение задачи найдено, отправьте сообщение всем студентам, кроме студента, который нашел решение, о том, что он был найден, и о том, что он был найден в первом раунде, с помощью механизма реализации событий.
Помогите пожалуйсте, до завтра нужно сдать
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Ошибка в функции — Не все пути к коду возвращают значение
1)Метод инициализации полей Init — метод должен контролировать корректность аргументов; 2)ввод с.
Не все пути к коду возвращают значение
Пытаюсь сделать вычисление среднего арифметического с помощью вспомогательного метода, хотел как.
Не все пути к коду возвращают значение
Есть пример в котором имеется факториал,хочу сделать метод для его вычисления,чтоб каждый раз не.
Не все пути к коду возвращают значение
namespace _1 < class Aquaticnimals < public Aquaticnimals(string name.
15078 / 10373 / 2725
Регистрация: 21.04.2018
Сообщений: 30,764
Записей в блоге: 2
Сообщение было отмечено Janibek как решение
Решение
Сообщение от Janibek