Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.62
Belko
0 / 0 / 0
Регистрация: 26.02.2010
Сообщений: 4
#1

ввод-вывод с использованием команд getchar-putchar - C++

26.02.2010, 16:25. Просмотров 2677. Ответов 14
Метки нет (Все метки)

Пример взят из книги Керниган, Ритчи "Язык программирования С"
Вот такой вот код.
Код
#include <stdio.h>
/*pods4et vvodimix simvolov*/
main()
{
	long nc;
	nc=0;
	while (getchar() != EOF)
		++nc;
	printf("%ld\n", nc);
}
Программа компилируется без ошибок, как в Dev-C++, так и в Codeblocks, но при вводе значений с клавиатуры и нажатия "enter" программа не выдает значения nc, а ждет ввода символов. Пробовал также писать вместо "EOF" код клавиши enter (13). Помогите, пожалуйста, разобраться.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2010, 16:25     ввод-вывод с использованием команд getchar-putchar
Посмотрите здесь:

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

функции getchar() и putchar() - C++
Здравствуйте всем. Такая вот задачка: Есть вот такой код: #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; ...

Getchar и putchar тип данных - C++
Скажите пожалуйста, почему мы используем именно тип int в данной программе, а не char? (в книжке про это написано, но я не понял что там...

Массив: функции getchar и putchar - C++
Задан массив. «Фамилия_стаж работы_зарплата». Преобразовать массив так: стаж работы увеличить на год, если он станет равен 10, то зарплату...

Объяснить назначение функций getchar и putchar - C++
Всем привет!) Объясните, пожалуйста, для чего нужна функция getchar и putchar максимально понятным для новичка языком, приводя пример....

Файловый ввод/вывод с использованием scanf(); - C++
Дан текстовый файл с числами. Следует заполнить массив int arr; числами из файла input.txt. Для этого требуется использовать scanf();...

Форматный ввод/вывод с использованием текстовых файлов. - C++
ЗДРАВСТВУЙТЕ. МЕНЯ ЗОВУТ ДАША. У МЕНЯ ПРОБЛЕМА, Я НЕ ЧЕГО НЕ ПОНИМАЮ В С++, А У МЕНЯ ЗАЧЕТ, МОЖЕТ КТО ТО МНЕ СМОЖЕТ СДЕЛАТЬ МОЁ ЗАДАНИЕ: ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
26.02.2010, 17:11     ввод-вывод с использованием команд getchar-putchar #2
Странно это. Особенно с 13 (Enter)
Попробуй Ctrl-Z (это EOF)
Metax
6 / 6 / 3
Регистрация: 27.02.2010
Сообщений: 17
27.02.2010, 02:09     ввод-вывод с использованием команд getchar-putchar #3
думаю стоит для начала обяъвить eof , #define eof -1, после чего для завершения ввода и соотвественнно выхода из while использовать комбинацию клавишь ctrl + z ( которая выдаёт -1), или же #define eof 10 => при нажатии enter ^_^
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
27.02.2010, 02:34     ввод-вывод с использованием команд getchar-putchar #4
Ничего объявлять не надо, EOF у него уже объявлена где надо, иначе вылезла бы ошибка: "Неизвестный идентификатор", типа такого. Кто не верит, тот заходит в папку с инклудами, набирает в командной строке
FIND "EOF" *h> rez.txt <enter>

После чего смотрит получившийся файл rez.txt, находит там EOF и имя файла, в котором она объявлена, после чего убеждается, что этот файл подключен и радуется жизни.
...Кстати, если нужно найти что-то в инклудах, функцию, структуру, макрос какой-нибудь всегда так делайте. Находится на раз.
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,507
27.02.2010, 03:04     ввод-вывод с использованием команд getchar-putchar #5
Цитата Сообщение от kravam Посмотреть сообщение
находит там EOF и имя файла, в котором она объявлена
в stdio.h она объявлена, чё её искать-то?
Код
$ grep EOF /usr/include/stdio.h 
#ifndef EOF
# define EOF (-1)
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
27.02.2010, 03:09     ввод-вывод с использованием команд getchar-putchar #6
Чтобы убедиться
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
27.02.2010, 06:16     ввод-вывод с использованием команд getchar-putchar #7
Belko, ещё
Код
echo abcd | prog.exe
а enter - это символ 0xA
Belko
0 / 0 / 0
Регистрация: 26.02.2010
Сообщений: 4
27.02.2010, 09:44  [ТС]     ввод-вывод с использованием команд getchar-putchar #8
Accept, я не понял, что вы написали. Нельзя ли поподробнее.

С первой попытки нажатие ctrl+z приводит к появлению "^Z" в окне выполнения программы. Может я чего-то не так делаю, конечно.
Metax
6 / 6 / 3
Регистрация: 27.02.2010
Сообщений: 17
27.02.2010, 14:01     ввод-вывод с использованием команд getchar-putchar #9
всё правильно делаешь, после появления ^Z нажми enter или любую клавишу, должно всё заработать )
Belko
0 / 0 / 0
Регистрация: 26.02.2010
Сообщений: 4
27.02.2010, 14:43  [ТС]     ввод-вывод с использованием команд getchar-putchar #10
Да! После нажатия ctrl+z выдает ответ(правда на 1 больше чем я ввожу символов). Но вопрос все еще остается! Почему программа выходит из цикла только после набора ctrl+z?
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
27.02.2010, 15:18     ввод-вывод с использованием команд getchar-putchar #11
Потому, что у тебя в условии написано, что выход из цикла тогда будет, когда встретится символ "конец файла"

Cмотри. Ты написал: aaaaaaa<enter> Ни один из этих симолов не является символом конца файла. ПОэтому всё это считается и выведется в консоль по одному символу, включая последний (<enter>)

Это понятно? Надеюсь. Вставим в этот поток символ конца файла. Он вставляется^Z То есть пишем:
^Z<enter>

Всё, прога считает^Z который есть символ конца файла (EOF это символ конца файла) выйдет из цикла.
_____________________________________________________________________

Теперь осталось два вопроса.

1) Кто определяет что ^Z это символ конца файла?
Не знаю. Я встречал другие реализации такой проги, где символом конца файла было ^D, единых стандартов нет. А поэтому создаёшь себе текстовый документ, озаглавливаешь его "Примечания" и пишешь в примечаниях, что на данный момент на твоей машине символ конца файла ^Z, но может быть и ^D. Периодически перечитываешь и не заморачиваешься

2) ПОчему выхода из цикла не происходит по вводу
aaaaaaa^Z<enter> (так, по крайней мере у меня)
Ответ: не знаю. По логике вещей вроде в потоке встретился символ конца файла, цикл должен закончиться, но он продолжается
ЕСли у тебя тоже так, просто записываешь эту деталь в "Примечания" и периодически к ней возвращаешься.
Рано или поздно ты сам ответишь на эти вопросы. Навскидку- просто реализаторы ПО, отвечающего за соответвие работы ПО написанному в книжке, отошли от этого соответствия.
Ну, так они и не обязаны следовать никаким правилам.
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,507
27.02.2010, 15:35     ввод-вывод с использованием команд getchar-putchar #12
Цитата Сообщение от kravam Посмотреть сообщение
Кто определяет что ^Z это символ конца файла?
Не знаю. Я встречал другие реализации такой проги, где символом конца файла было ^D, единых стандартов нет.
А я-то думал - в дос/виндовс консоли конец файла - Ctrl+Z, в *NIX - Ctrl+D... Оказывается - как Бог на душу положит?

Цитата Сообщение от kravam Посмотреть сообщение
Навскидку- просто реализаторы ПО, отвечающего за соответвие работы ПО написанному в книжке, отошли от этого соответствия.
Ну, так они и не обязаны следовать никаким правилам.
Мало того, и книжку эту наверняка не читали...
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
27.02.2010, 15:52     ввод-вывод с использованием команд getchar-putchar #13
Это всё неважно сейчас. Важно, чтобы чел воспринял НЕКОТОРЫЕ вещи как данность и не ставил вопрос: "А почему так"

Ну а наша Вами задача развести возникающие у него вопросы по разным углам:
1) В этом угле будут вопросы на которые ему необходимо найти ответ СЕЙЧАС (сам или с чьей-то помощью- пока не об этом речь).
2) В этом угле будут вопросы, на которые ответ не нужен. ПРорсто пусть запоминает как есть и всё.

Со временем список вопросов будет меняться.

...Всё же остальное- суета сует и томление духа.
Belko
0 / 0 / 0
Регистрация: 26.02.2010
Сообщений: 4
27.02.2010, 16:19  [ТС]     ввод-вывод с использованием команд getchar-putchar #14
Спасибо огромное всем кто ответил!
Kravam, спасибо тебе персонально за развернутый ответ!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2010, 05:40     ввод-вывод с использованием команд getchar-putchar
Еще ссылки по теме:

Ввод количества команд самостоятельно - C++
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt; #include&lt;conio.h&gt; #include&lt;iomanip&gt; #define n 2 ...

Фунция putchar() - C++
Всем привет! Почему, когда вывожу часть строкового массива посимвольно - функция putchar выводит каждый элемент по два раза? #include...

Ввод данных с использованием argv и argc - C++
не могу понять почему программа не работает без использования ввода из командной строки работает,а так нет подскажите пожалуйста в чём...

Ввод данных с использованием стрелок на клавиатуре - C++
Здравствуйте, такой вопрос: в задании указано, что для ввода одной из переменных должна быть возможность вводить ее значение, используя...

Как сделать ввод данных в файл с использованием связанного списка - C++
у меня есть односторонний связанный список который расставляет данные в порядке увеличения. данные это порядковый номер персонала. ...


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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.02.2010, 05:40     ввод-вывод с использованием команд getchar-putchar #15
Цитата Сообщение от Belko
Accept, я не понял, что вы написали. Нельзя ли поподробнее.
это в консоли программа echo посылает свой вывод на ввод программе prog.exe
когда prog.exe читает данные, она их подсчитывает, а когда они заканчиваются, она больше прочитать не может и getchar() возвращает EOF (что значит: либо произошла ошибка чтения, либо данных больше нет)
Yandex
Объявления
28.02.2010, 05:40     ввод-вывод с использованием команд getchar-putchar
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru