Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
Добрый день. Появился у меня простой вопрос по С. Подумал, что С++ должны были про С хоть краем уха слышать, решил оставить эту тему здесь. Если я не прав, пожалуйста перенесите. Суть задачи: считать строку, вводимую в стандартный ввод. Строка с пробелами. Вот что я пробовал: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Компилировал в студии 2010. Подскажите, как можно решить эту проблему иначе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2012, 23:17 |
|
||
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
Небольшое наблюдение за кусочком кода: Код: plaintext 1. 2. 3. 4. При прохождении сквозб условие цикла события развиваются следующим образом: 1) Управление передается в тело цикла без чтения информации с консоли, строка line содержит только null-терминатор 2) Упраление передается на условие цикла 3) Ввод с консоли 4) Управление передается в тело цикла. В строке то, что ввели с консоли. 5) Шаги №№2-4 повторяются, пока не поступит с клавиатуры символ Ctrl+Z Подскажите, а почему первый вызов fgets не приводит к чтению информации с консоли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2012, 23:52 |
|
||
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
Жентос Код: plaintext 1. 2. 3. 4. Да, это описано в документации, читать надо внимательнее. Если хочешь все символы включая пробельные, используй %c или %[] с перечислением допустимых символов. Жентос Код: plaintext 1. 2. 3. 4. Это проблема отладчика. Код верный и будет работать. Жентос Код: plaintext 1. 2. 3. Аналогично. Код верный и будет работать, хотя gets() использовать не рекомендуется. Можно с легкостью выйти за пределы буфера. ЖентосКомпилировал в студии 2010. Подскажите, как можно решить эту проблему иначе?VS это один из самых дурных трансляторов. Скорее всего твои проблемы растут из-за неправильно поставленной галочки где-то в сотнях его диалогов настройки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2012, 02:29 |
|
||
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
ЖентосНебольшое наблюдение за кусочком кода: ... При прохождении сквозб условие цикла события развиваются следующим образом: То что у тебя код программы не соответствует выполняемому коду это проблема оптимизатора. Оптимизатор имеет право переставить строки программы местами если это улучшит производительность не повредив точности. В твоем случае похоже что оптимизатор превратил цикла while{} в do{}while(). А отладчику такие тонкости не по зубам, он работает на основе того что выдал компилятор, но по оригинальному тексту программы. В общем, если хочешь увидеть "правильное" выполнение - отключи оптимизатор вообще. А лучше всего, не используй отладчик, привыкай работать без него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2012, 02:37 |
|
||
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
Жентосотладчик выполнил эту строку, даже не передав управление консоли (ввод не состоялся) Там что-то уже было (скорее всего, бесхозный 0x13). Собственно, и fgets ровно для решения поставленной задачи придуман, и с помощью scanf-а тоже можно - изучите по нему мануал. Ибо просто %s - это таки до пробельного символа и задумано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2012, 02:45 |
|
||
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Первый и единственный вызов работает. Работает в VC 2010 (и в любом другом). С дефолтными (и не очень) настройками проекта. Так что... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2012, 02:53 |
|
||
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
Такое часто бывает, когда в отладчике запускаешь программу собранную в release. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2012, 03:02 |
|
||
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
Edd.Dragon , переместил fgets в начало кода, сработало как требуется с первой попытки. Возможно, в буфере клавиатуры есть какие-то еще символы, которые fgets считывает сразу же после вызова. Возникает вопрос: как проверить буфер на наличие в нем символа? В нем вполне могут быть символы, т.к. эта строка -- это уже второй ввод с клавиатуры по счету. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2012, 07:43 |
|
||
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
Т.к. править свои сообщения нельзя, то напишу еще одно. Проблему решил очисткой буфера ввода, после чтения scanf-ом Код: plaintext 1. Всем спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2012, 08:02 |
|
||
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
> То что у тебя код программы не соответствует выполняемому коду это проблема > оптимизатора. Оптимизатор имеет право переставить строки программы местами если > это улучшит производительность не повредив точности. Кааакие фантазии... А вот я думаю, что скорее всего автор пишет один код, а отлаживает другой, как это часто бывает. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2012, 00:18 |
|
||
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
> попытки. Возможно, в буфере клавиатуры есть какие-то еще символы, которые fgets > считывает сразу же после вызова. Фантазии. Возникает вопрос: как проверить буфер на > наличие в нем символа? Никак. И не надо проверять, и нет никакого буфера клавиатуры для С-шной программы, и в буфер никогда ничего лишнего не попадает. ТО, тчо ты возможно видешь -- проблемы твоей интерпретации. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2012, 00:22 |
|
||
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
Так где же истина. Я добавил флаши, и все заработало. Ясмотрел, кстати, из чего состояли строки, которые вводились "сами". В них первым был символ "10" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2012, 02:45 |
|
||
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
For input streams, fflush() discards any buffered data that has been fetched from the underlying file, but has not been consumed by the application. The open status of the stream is unaffected. У тебя просто видимо в строке для ввода после пробела есть еще какой -то мусор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2012, 07:20 |
|
||
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
MasterZivFor input streams, fflush() discards any buffered data that has been fetched from the underlying file, but has not been consumed by the application. The open status of the stream is unaffected. У тебя просто видимо в строке для ввода после пробела есть еще какой -то мусор. Это выглядело так: я нажал на кнопку "1", а потом на "ввод". А следующий ввод не работал, т.к. сканф.... кстати, я мог в шаблоне \n указать. Интересно, тогда пришлось бы буфер чистить или нет? Приду домой попробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2012, 18:57 |
|
||
|
[С] Подскажите, как считать из консоли строку с пробелами?
|
|||
|---|---|---|---|
|
#18+
Прикольно, кстати, я сколько себя помню на С пишу, но очень мало использовал scanf. Практически никогда. Всегда либо вообще нет ввода-вывода, либо читаешь из потока строками, потом разбираешь на поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2012, 16:16 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2020642]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
77ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 287ms |
| total: | 462ms |

| 0 / 0 |
