|
0 / 0 / 0
Регистрация: 23.04.2022
Сообщений: 45
|
||||||
Инициализация переменной внутри ветвления13.05.2022, 17:10. Показов 3578. Ответов 16
Перевожу программу с Паскаля на С++. Столкнулась со следующей проблемой: инициализирую переменную n в первом ветвлении case, а в третьем это значение требуется для условия выполнения, программа компилируется, но при выполнении выскакивается сообщение о том, что переменная n не инициализирована. Как исправить данную ситуацию?
0
|
||||||
| 13.05.2022, 17:10 | |
|
Ответы с готовыми решениями:
16
Неясное условие внутри команды ветвления Инициализация массива внутри case |
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
|
| 13.05.2022, 17:37 | |
|
Pryahiiina, код не полный, приведи полный.
Для case неплохо бы фигурные скобки расставить
0
|
|
|
0 / 0 / 0
Регистрация: 23.04.2022
Сообщений: 45
|
||||||
| 13.05.2022, 18:04 [ТС] | ||||||
Добавлено через 1 минуту Алексей1153, в каком месте следует добавить скобки, вы думаете проблема в них?
0
|
||||||
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
|
| 13.05.2022, 18:27 | |
|
Pryahiiina, компилятор не смог удостовериться что в процессе исполнения программы [case 10] всегда будет вызван перед [case 14]. Поэтому вам сообщение: внимание, возможна ситуация где переменная n может быть использована без инициализации.
1
|
|
|
0 / 0 / 0
Регистрация: 23.04.2022
Сообщений: 45
|
|
| 13.05.2022, 18:55 [ТС] | |
|
QueryMonkey, то есть если я вызову case 10 перед case 14, в памяти будет значение n, которое я ввела?
0
|
|
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
||||||||||||
| 13.05.2022, 19:04 | ||||||||||||
Сообщение было отмечено Pryahiiina как решение
РешениеПо-моему в паскале численные переменные инициализируются по умолчанию в ноль. В таком случае при переводе с паскаля сделайте такую инициализацию, чтобы не ловить чужие ошибки. вместо
1
|
||||||||||||
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
||
| 13.05.2022, 20:18 | ||
|
Pryahiiina, в данном случае проблема не в скобках, а в отсутствии инициализации переменных. Но скобки тоже не помешают, к этому нужно сразу привыкать
1
|
||
|
0 / 0 / 0
Регистрация: 23.04.2022
Сообщений: 45
|
|
| 13.05.2022, 20:22 [ТС] | |
|
QueryMonkey, Это решило проблему с вылетающим сообщением, но в почему-то в памяти хранится значение n=0, а не вводимое с клавиатуры.
0
|
|
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
|
| 13.05.2022, 21:43 | |
Сообщение было отмечено Pryahiiina как решение
Решение
Если переменная объявлена в цикле, то она и инициализируется в цикле, многократно.
Вынесите ее вверх, за цикл.
1
|
|
|
Вездепух
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
|
||||||||
| 16.05.2022, 22:06 | ||||||||
case не выполнялась перед третьей и переменная не инициализировалась. case инициализировала переменную, так выполняте ее сперва. Не будете выполнять - не будет иницализировать. Что тут непонятного?Я не пойму, что вы вообще пытались сделать в этой функции. Значение k там нигде не меняется, то есть вызывается всегда только одна ветка case. То есть если вызывается третья, то вызова первой не будет и переменная n не будет инициализирована. Что и происходит в вашем случае. Поэтому не ясно, зачем вы нам тут рассказываете про первую ветку case. При чем здесь она вообще?И в чем смысл вот этого цикла
case), либо не завершается никогда, а просто молча зависает в бесконечности. В чем тут замысел? В чем назначение такого цикла?
0
|
||||||||
|
0 / 0 / 0
Регистрация: 23.04.2022
Сообщений: 45
|
|
| 16.05.2022, 22:49 [ТС] | |
|
TheCalligrapher, k это координаты нахождения курсора относительно меню. Поэтому в зависимость от значения k меняется алгоритм действий. Моя проблема состояла в том, что даже при последовательном захождении в пункты case nне инициализировалась. Нужно было вынести эту переменную как глобальную.
0
|
|
|
Вездепух
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
|
||
| 16.05.2022, 22:53 | ||
int mistake(int k) заходит только в один case только один раз. Откуда может взяться "последовательное захождении в пункты case"? О чем речь?
0
|
||
|
0 / 0 / 0
Регистрация: 23.04.2022
Сообщений: 45
|
|
| 16.05.2022, 22:59 [ТС] | |
|
TheCalligrapher, k меняется в основной программе int main(), это значение перндается в int mistake(int k) и согласно с эти значением выполняются пункты case.
0
|
|
|
Вездепух
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
|
||
| 16.05.2022, 23:00 | ||
int mistake(int k) в ней будет создаваться своя перемнная n, не имеющая никакого отношения к переменной n из предыдущих вызовов.
0
|
||
|
0 / 0 / 0
Регистрация: 23.04.2022
Сообщений: 45
|
|
| 16.05.2022, 23:02 [ТС] | |
|
Я знаю, именно об этом я вам и написала в первом сообщении. Я вынесла n, как глобальную переменную.
0
|
|
|
Вездепух
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
|
||||||
| 16.05.2022, 23:03 | ||||||
|
Тем не менее, еще раз: в чем смысл вот этого цикла в
int mistake(int k)
0
|
||||||
|
0 / 0 / 0
Регистрация: 23.04.2022
Сообщений: 45
|
|
| 16.05.2022, 23:10 [ТС] | |
|
[color="grey"]Добавлено через 59 секунд[/color]
TheCalligrapher, согласна, над этим я просто не подумала, стоит убрать спасибо.
0
|
|
| 16.05.2022, 23:10 | |
|
Помогаю со студенческими работами здесь
17
Инициализация обьекта внутри другого класса Инициализация массива внутри структурированнного типа Инициализация массива строк внутри класса Инициализация переменной Инициализация переменной Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|