Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
7 / 8 / 9
Регистрация: 15.07.2015
Сообщений: 56
1

При вводе данных цикл по поиску EOF в Getchar не останавливается

15.07.2015, 14:28. Показов 3006. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здраствуйте, вот такая проблема:

C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
main()
{
int nc=0;
 
while(getchar() != EOF)
   nc++;
 
printf("%d\n",nc);
getch();
}
При выполнение такого кода ничего не выводит, ты вводишь данные, но цикл продолжает работать бесконечно, хотя должен прекратить и перейти к printf. Использую dev-c++.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2015, 14:28
Ответы с готовыми решениями:

Ограничить данные при вводе scanf или getchar
Добрый вечер. Подскажите, пож-та, как ограничить ввод данных. То есть получить все положительные...

Завершение цикла при вводе EOF
Пишу небольшую программку и в ней имеется вот такой код: typedef...

Почему последний Enter при вводе строки отбрасывается (getchar)?
Родскажите, почему последний энтер при вводе строки отбрасывается? 1. ch получает введенную...

Почему при вводе числа программа работает нормально, а при вводе буквы уходит в бесконечный цикл?
void mainmenu() { cout &lt;&lt; &quot;Введи число&quot; &lt;&lt; endl; cin &gt;&gt; choice; if (choice == 1) { cout &lt;&lt;...

13
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
15.07.2015, 14:33 2
Цитата Сообщение от QewerC Посмотреть сообщение
Использую dev-c++.
В C++ это не скомпилируется.
На C,это подсчет количества введенных символов.
0
7 / 8 / 9
Регистрация: 15.07.2015
Сообщений: 56
15.07.2015, 14:35  [ТС] 3
но dev-c++ вроде как универсальный и для си и для c++.
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
15.07.2015, 14:42 4
Цитата Сообщение от QewerC Посмотреть сообщение
но dev-c++ вроде как универсальный и для си и для c++.
Вполне вероятно.Я специально уточнил,чтобы вы конкретизировали вопрос.
0
7 / 8 / 9
Регистрация: 15.07.2015
Сообщений: 56
15.07.2015, 14:49  [ТС] 5
Короче должен вывести количество символов но вместо этого продолжает требовать вводит еще.
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
15.07.2015, 15:28 6
QewerC, Ctrl+Z введите.Или поставьте ограничение на ввод не EOF,а другой символ.
0
7 / 8 / 9
Регистрация: 15.07.2015
Сообщений: 56
15.07.2015, 15:43  [ТС] 7
Почему так происходит? ctrl+z надо вводит вначале или в конце? ctrl+z За что эта команда отвечает?
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
15.07.2015, 15:51 8
Цитата Сообщение от QewerC Посмотреть сообщение
Почему так происходит? ctrl+z надо вводит вначале или в конце? ctrl+z За что эта команда отвечает?
Соответствует EOF в windows.
0
7 / 8 / 9
Регистрация: 15.07.2015
Сообщений: 56
15.07.2015, 16:21  [ТС] 9
Почему тогда это работает только так: ввел символы, энтер, дальше контр з и энтер, а не мои символы, контр з и энтер?
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
15.07.2015, 17:58 10
QewerC, получается getchar() осуществляет буферизованный ввод, поэтому при таком вводе остановка не происходит.Если хотите,можете поискать как выполнить не буферизованный ввод одного символа.
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
16.07.2015, 09:29 11
Цитата Сообщение от S_el Посмотреть сообщение
Если хотите,можете поискать как выполнить не буферизованный ввод одного символа.
Если такое вообще возможно без вмешательства в I/O sheduler.
EOF надо воодить в новой пустой строке. А лучше не заморачиваться со стандартными потоками (которые на практике вообще не пригодятся), а написать файл и направить поток в программу
Bash
1
$./program < text_data.txt
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
16.07.2015, 10:17 12
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от castorsky Посмотреть сообщение
Если такое вообще возможно без вмешательства в I/O sheduler.
Стало интересно и я нашел у Керниган-а и Ритчи такую функцию:
C
1
2
3
4
5
int getchar(void)
{
char c;
return (read(0, &c, 1) ==1) ? (unsigned char)c : EOF;
}
если заменить вызов getchar из stdio.h на вызов этой,то будет работать как хочет ТС:
Цитата Сообщение от QewerC Посмотреть сообщение
мои символы, контр з и энтер?
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
16.07.2015, 10:53 13
Это не отменяет буфферизации I/O ядром.

Добавлено через 16 минут
Вообще буферизация I/O используется неспроста. Если отбросить сокеты, то весь остальной I/O - это работа с дисками (считаем что диск - абстракция постоянного хранилища данных). Так вот скорости работы процессора и дисковых операций различаются в сотни порядков. Выход из этой ситуации нашелся в условном усреднении скоростей путем различных техник буфферизации I/O. Иначе мы просто не могли бы работать в привычном для нас понимании этого слова.
1
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
16.07.2015, 11:13 14
Цитата Сообщение от castorsky Посмотреть сообщение
Это не отменяет буфферизации I/O ядром.
Не отменяет,но это и не требуется.

Цитата Сообщение от castorsky Посмотреть сообщение
Вообще буферизация I/O используется неспроста.
Хорошо изложили
0
16.07.2015, 11:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.07.2015, 11:13
Помогаю со студенческими работами здесь

Бесконечный цикл при вводе несоответствующего типа данных
Цикл, который просит ввести пользователя число, если это число ни одно из чисел 1, 2 или 3, то цикл...

Getchar и putchar EOF
Подскажите что за символ такой EOF? Чисто догадываясь это 0, но не работает. #include &lt;stdio.h&gt; ...

Прекращение чтения строк при вводе символа EOF
Задача такая: программа читает строки и прекращает чтение на третей строке включительно или при...

Назначение функций getchar и костанты EOF
Помогите чуть плис что делает getchar и EOF ато я програму уже 2 день не могу написать , чуствую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru