3 / 3 / 0
Регистрация: 07.10.2017
Сообщений: 18
|
||||||
1 | ||||||
Непонятные действия программы07.10.2017, 12:40. Показов 898. Ответов 3
Метки нет Все метки)
(
Всем привет, не буду ходить вокруг да около, я начал изучать С (не С++) и мне нужна ваша помощь, надеюсь на ваше понимание.
1) Ввожу [a] – Получаю [ничего я не получаю] 2) Ввожу [12345aa] – Получаю [12345] 3) Ввожу [123a456789aa] – Получаю [456789] 4) Ввожу [12345a] – Получаю бесконечный ввод (пока не введу отдельно букву «а» (см. пункт 1) или пока не введу строку и на конце ДВЕ буквы «а» (см. пункт 2)) 5) Ввожу [1234] [12345] [12] [123456a] [123456789] [a] Получаю [123456789] У меня возник такой вопрос: Почему при вводе [123a456789aa] моя (не совсем моя) программа завершается и выводит результат [456789]. Разве она не должна была отработать до [123], встретить букву «а», завершить цикл for (в функции getline) и перейти снова в цикл while (main). После чего из цикла while (main) снова перейти в цикл for (в функции getline) и ожидать нового ввода? Буду очень признателен, если поможете. p.s. Я человек начинающий, поэтому, если ответите развернуто – будет просто замечательно. p.s.2 getline – здесь выступает не как конкретная функция (которая есть в С++), а просто как название функции
0
|
|
07.10.2017, 12:40 | |
Ответы с готовыми решениями:
3
Непонятные действия win7 or HARDWARE Установились непонятные программы Nuesearh в браузерах и программы непонятные Непонятные программы, реклама в браузере |
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
07.10.2017, 14:23 | 2 |
![]() Решение
Функция getchar(), которая непосредственно осуществляет ввод данных внутри функции getline, будет ожидать новый ввод только в том случае, если во входном буфере нет новых символов (то есть если входной буфер пуст). А в вашем случае во входном буфере ещё остались символы 456789aa, которые будут тут же считаны, без дополнительного ожидания.
1
|
3576 / 2244 / 406
Регистрация: 09.09.2017
Сообщений: 9,396
|
|
07.10.2017, 14:31 | 3 |
![]() Решение
В getline() форматирование бы поправить.
Еще можно в конец getline() добавить отладочный вывод чтобы посмотреть что же вводится на самом деле, это не говоря о простейшем проходе по шагам
1
|
3 / 3 / 0
Регистрация: 07.10.2017
Сообщений: 18
|
|
07.10.2017, 15:26 [ТС] | 4 |
Спасибо likehood, огромное, прям открыли мне глаза)
p.s. Я даже решил поэкспериментировать и сделал следующее: Ввожу [123a4567] [12345aa] Получаю [4567] Пользователем, кого вдруг будет интересовать данный вопрос, разъясню, почему вывело именно [4567], а не вывело [12345], здесь же больше цифр, скажете вы. Но!!!! После ввода [123a4567] вы нажимаете на enter (а в условии сказано, что если символ равен enter, то длина строки будет увеличиваться на один)(НЕ ЗАБЫВАЙТЕ ПРО УСЛОВИЕ, ЧТО [123a] УЖЕ ОТРАБОТАЛО, СЕЙЧАС MAX = 3, НО БУФЕР У НАС В ДАННЫЙ МОМЕНТ НЕ ПУСТОЙ, ТАМ ЕСТЬ ЕЩЕ [4567+enter], СПАСИБО likehood). Да и к тому же в цикле while стоит строгое условие (if(len > max)), следовательно, когда мы введем [12345aa] у нас длина строки len будет равна max (5 = 5), а не больше ее, поэтому в условие if мы не зайдем. Добавлено через 1 минуту Спасибо COKPOWEHEU, добавил, стало более наглядно
0
|
07.10.2017, 15:26 | |
Помогаю со студенческими работами здесь
4
Программы непонятные устанавливаются сами собой Запускаются левые программы, непонятные процессы Помогите разобраться, непонятные задержки в работе программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |