|
0 / 0 / 0
Регистрация: 23.04.2022
Сообщений: 45
|
||||||
Инициализация переменной внутри ветвления13.05.2022, 17:10. Показов 3556. Ответов 16
Перевожу программу с Паскаля на С++. Столкнулась со следующей проблемой: инициализирую переменную n в первом ветвлении case, а в третьем это значение требуется для условия выполнения, программа компилируется, но при выполнении выскакивается сообщение о том, что переменная n не инициализирована. Как исправить данную ситуацию?
0
|
||||||
| 13.05.2022, 17:10 | |
|
Ответы с готовыми решениями:
16
Неясное условие внутри команды ветвления Инициализация массива внутри case |
|
фрилансер
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,031
|
|
| 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
|
||||||||||||
|
фрилансер
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,031
|
||
| 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
|
|
|
Вездепух
12932 / 6800 / 1820
Регистрация: 18.10.2014
Сообщений: 17,211
|
||||||||
| 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
|
|
|
Вездепух
12932 / 6800 / 1820
Регистрация: 18.10.2014
Сообщений: 17,211
|
||
| 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
|
|
|
Вездепух
12932 / 6800 / 1820
Регистрация: 18.10.2014
Сообщений: 17,211
|
||
| 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
|
|
|
Вездепух
12932 / 6800 / 1820
Регистрация: 18.10.2014
Сообщений: 17,211
|
||||||
| 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
Инициализация обьекта внутри другого класса Инициализация массива внутри структурированнного типа Инициализация массива строк внутри класса Инициализация переменной Инициализация переменной Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|