2 / 2 / 0
Регистрация: 07.04.2016
Сообщений: 248
|
||||||
1 | ||||||
программа пропускает строку08.06.2020, 22:39. Показов 3213. Ответов 10
Метки нет (Все метки)
Бодрого времени суток!
Имеем: я(самоучка) - уровень "днище" + много желания развиваться, учебник по с++, задача(условие ниже), мое описание и мысли через призму моих знаний, которые где-то в 0, сам код внизу, результат в виде картинки. Задача: написать простую прогу в которой пользователь вводит поочередно слова в виде строковых переменных и эти строковые переменные вставляются в объект списка. Вопрос: 1. В чем причина пропуска(или странной работы) строки 26 и не отсутствие возможности пользователя ввести очередное слово. Понятное дело что из-за нехвата знаний. При переходе с помощью оператора goto на повторный ввод слова, строка 26 не дает возможности ввести слово, к тому же вывод вопроса о повторе ввода идет следом, а не на след. строке. Мои размышления: Должны создаваться новые строковые переменные? вроде бы нет, ведь мы вызываем функцию вставления строковой переменной в объект списка(я не залезал в файл stl библиотеки т.к. моих знаний еще не достаточно для полного понимания тчо там происходит), в этой функции вызывается метод вставки\создания атрибута объекта, если создание значит копирование из строковой переменной в атрибут объекта? если так то тогда, мне кажется, можно иметь одну строковую переменную которую мы перезаписываем новыми словами и отправляем в функцию вставки в список. Кликните здесь для просмотра всего текста
0
|
08.06.2020, 22:39 | |
Ответы с готовыми решениями:
10
Пропускает строку ввода Пропускает строку ввода Пропускает одну строку ввода! При вводе пропускает первую строку |
319 / 216 / 114
Регистрация: 14.05.2020
Сообщений: 890
|
||||||
08.06.2020, 22:44 | 2 | |||||
Перед 26 поставить
1
|
2 / 2 / 0
Регистрация: 07.04.2016
Сообщений: 248
|
|
08.06.2020, 22:55 [ТС] | 3 |
спасибо!
если не забуду пока другие задачи делаю, изучу что делает этот код.
0
|
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
|
||||||
08.06.2020, 23:02 | 4 | |||||
Никогда не используйте goto, разве что хотите специально запутать код
тут всё будет работать и БЕЗ него
0
|
2 / 2 / 0
Регистрация: 07.04.2016
Сообщений: 248
|
|
08.06.2020, 23:18 [ТС] | 5 |
Да, читал про это, но я не смог догадаться как поставить программу в тупик и не дать ей закончится если при запросе ввести букву ответа("y" или "n") вводишь любую другую.
Ваш вариант был изначально у меня, но изза того что программа заканчивается при вводе любой буквы кроме указанных для меня есть ненормальная работа. К тому же goto указывает на такое место после которого находится переменная которая будет перезаписана пользователем и, мне кажется, не приведет к ошибке. Правда все что я написал похоже на отмазу что бы использовать опасный оператор goto...
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|||||||||||
08.06.2020, 23:28 | 6 | ||||||||||
для этого существует слово
continue https://ravesli.com/urok-70-op... -continue/ Добавлено через 7 минут хотя в этой конструкции много странного если userAnswerCin не равна 'y' идем в начала цикла, если равна идем туда же значит проверку можно выбросить и написать бесконечный цикл с выходом по break
break
n
0
|
2 / 2 / 0
Регистрация: 07.04.2016
Сообщений: 248
|
||||||
09.06.2020, 00:16 [ТС] | 7 | |||||
строка работает при условии что условие есть истина. 1. нажали n - проверка строки 2 - n есть n? - да - значит, истина - цикл окончен. 2. нажали y - проверка строки 2 - y не y? - еще как 'y' но строка будет работать если будет буква не похожая 'y', а у нас как раз таки 'y' - значит, ложь - поверка условия while - истина - повтор цикла. 3. нажали q - проверка строки 2 - q есть n? - нет - значит, ложь - проверка строки 6 - q не y - да - значит, истина - переход по goto. 4. нажал любую другую букву - работаем по пункту 3. ваш вариант: if(userAnswerCin == 'n') { break; } } while(1); Не ясно условие у while. Что если я нажму 'q'? ваш второй вариант: } while(userAnswerCin != 'n'); Тогда не пойму как мне написать вопрос о повторном вводе... Жмите любую клавишу для повторного ввода, если не хотите вводить жмите 'n'? Ну такой себе вопрос....
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
09.06.2020, 08:11 | 8 |
оба варианта заканчивают цикл,заканчивают цикл при нажатии на
n как собственно и первоначальный вариант переход то куда? на начало цикла что y , что не y действие то одно и тоже
0
|
2 / 2 / 0
Регистрация: 07.04.2016
Сообщений: 248
|
|
12.06.2020, 13:44 [ТС] | 9 |
мне есть что ответить, напишу ответ когда появится время.
0
|
2 / 2 / 0
Регистрация: 07.04.2016
Сообщений: 248
|
|||||||||||
16.06.2020, 12:35 [ТС] | 10 | ||||||||||
итак, переписал код в простой, правда это сообщение уже не относится к первоначальному вопросу:
Вариант 1:
Мне такой расклад не нравится, программа должна запускаться по моей команде и завершаться так же по моей команде. Вариант 2: С использование опасного "goto".
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
||||||
16.06.2020, 13:38 | 11 | |||||
Сообщение было отмечено Palich как решение
Решение
сделать еще один цикл,внутри основного, который будет проверят корректность ввода
0
|
16.06.2020, 13:38 | |
16.06.2020, 13:38 | |
Помогаю со студенческими работами здесь
11
Программа пропускает cin >> Программа пропускает cin Программа пропускает кусок кода Программа пропускает ввод первой строки Шифрование: программа пропускает первую букву 'а' Программа пропускает оператор при выполнении Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |