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

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

Войти
Регистрация
Восстановить пароль
 
Kontaktnik
2 / 2 / 2
Регистрация: 22.08.2012
Сообщений: 24
#1

EOF K&R - C++

31.08.2013, 02:09. Просмотров 410. Ответов 8
Метки нет (Все метки)

Всем доброго времени суток. Изучаю Си по Дейтелам, а теперь попала в руки книга авторов языка. Интересно теперь будет параллельно по двум книгам вести своё обучение. Так вот о чём я, не могу понять вродеб-то простых вещей. Объясните пожалуйста.

Итак, сначала выясним число EOF, простите уж за мой нубский слэнг. Поехали:
C
1
2
3
4
5
6
7
8
#include <stdio.h>
 
int main()
{
   printf("EOF is %d\n", EOF);
 
   return 0;
}
Ответ: EOF is -1 // здесь всё понятно

Идём дальше:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
// подсчёт пробелов, табуляций и новых строк
main()
{
   int c, nb, nt, nl;
   nb = 0; // кол-во пробелов
   nt = 0; // кол-во табуляций
   nl = 0; // кол-во новых строк
 
   while ((c = getchar() != EOF)) {
      if (c == ' ')
         ++nb;
      if (c == '\t')
         ++nt;
      if (c == '\n')
         ++nl;
   }
 
   printf("%d%d%d\n", nb, nt, nl);
   return 0;
}
Вот в этой программе прямо-таки что хочешь делай, ничего не происходит.

wdfwefwec\n wdfwef
fwefwefew
wefwfwef-1
-1
-1
fwefwc // это мои "танцы" в консоле, до тех пор, пока не нажимаю ctrl+D(linux), затем нули:
000

Не задавая вопрос, ещё один пример:
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
main()
{
   int c;
 
   while (c = getchar() != EOF)
      printf("%d\n", c);
   printf("%d - at EOF\n", c);
 
   return 0;
}
1
1
1
1
-1
1
1
1 // ctrl+D
0 - at EOF

Опять "танцы", пока не нажата комбинация ctrl+D. Ввожу еденицу, программа мне три в ответ. В цикле про три ответа ничего не говорится. Ввожу EOF, то бишь -1, опять три ответа. Что-то я не могу в этом ничего понять. Может я чего-то недопонимаю и делаю неправильно ? Объясните новичку.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2013, 02:09     EOF K&R
Посмотрите здесь:

\n \0 EOF - C++
Добрый вечер, возник такой вопрос: зачем мы заменяем символ конца строки на нуль символ в данном коде (удаление символов содержащихся в s2...

Не работает while (!***.eof() ! - C++
Здравствуйте, задание такое: Вводить с клавиатуры данные и записывать их в файл в виде Имя группа оценка Иванов ...

Int Eof - C++
Вот проблема есть массив int a заполнять его целыми числами последовательность завершается признаком конца ввода

Почему не срабатывает EOF - C++
У меня стоит Visual Studio 2010 написал простенькую программу #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; int main() { int...

Функция fclose() и EOF - C++
int fclose( FILE *stream); Возвращает 0, если все ОК и возращает EOF, если какая-нибудь ошибка. Функция имеет тип Int. Значит...

Конец файла EOF - C++
Начал заново учить программирование на c++ по книге Кернигана, Ритчи. Дошел до главы с EOF и никак не могу разобраться уже несколько часов....

Ifstream и eof в нем - C++
Имеется код: int main() { setlocale(LC_ALL, &quot;rus&quot;); // корректное отображение Кириллицы char abc; ofstream fout(&quot;ofstream...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.08.2013, 02:19     EOF K&R #2
Цитата Сообщение от Kontaktnik Посмотреть сообщение
C++
1
while ((c = getchar() != EOF))
оу вы так хорошо изучаете, а кокой тут приоритет операций?
C++
1
while ((c = getchar()) != EOF)
Добавлено через 1 минуту
Цитата Сообщение от Kontaktnik Посмотреть сообщение
Ввожу EOF, то бишь -1, опять три ответа
ввод минус еденици в консоль/файл никакого отношений к EOF не имееет
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
31.08.2013, 02:26     EOF K&R #3
Цитата Сообщение от Kontaktnik Посмотреть сообщение
Ввожу EOF, то бишь -1
-1 - это данные, а не EOF. Начни с этого. EOF это не символ.

Добавлено через 55 секунд

Не по теме:

Jupiter, не увидел твою мессагу.

Kontaktnik
2 / 2 / 2
Регистрация: 22.08.2012
Сообщений: 24
31.08.2013, 02:38  [ТС]     EOF K&R #4
Цитата Сообщение от Jupiter Посмотреть сообщение
оу вы так хорошо изучаете, а кокой тут приоритет операций?
Код C++
1
while ((c = getchar()) != EOF)
Простите, здесь действительно не обратил внимание.

Разобрался, всем спасибо.

Стало понятно, что EOF это не символ. Тогда как объяснить константу в виде -1 ? Типа 0 или -1 == false ?
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
31.08.2013, 02:56     EOF K&R #5
Цитата Сообщение от Kontaktnik Посмотреть сообщение
Тогда как объяснить константу в виде -1
Что значит "объяснить константу"?
getchar считал введенные тобой символы в консоли: символ - и символ 1. Их коды не равны -1. Что здесь тебе не понятно?
Kontaktnik
2 / 2 / 2
Регистрация: 22.08.2012
Сообщений: 24
31.08.2013, 03:02  [ТС]     EOF K&R #6
С этим всем я разобрался, понял что EOF это и есть Ctrl+D. Понимаю как считывает getchar. Это всё более-менее понятно. Но вот код :

#include <stdio.h>

int main()
{
printf("EOF is %d\n", EOF);

return 0;
}

EOF is -1

Это я имел ввиду за константу. Почему -1 ?

PS. Кстати, извините что в тему плюсов написал, перепутал слегка
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
31.08.2013, 03:06     EOF K&R #7
Цитата Сообщение от Kontaktnik Посмотреть сообщение
Почему -1 ?
Ну, например, потому что нет символа с таким кодом, а конец потока функции обозначать нужно.
В конце концов... http://ru.wikipedia.org/wiki/EOF
Kontaktnik
2 / 2 / 2
Регистрация: 22.08.2012
Сообщений: 24
31.08.2013, 03:10  [ТС]     EOF K&R #8
Да здесь не в "конце концов", а в "начале начал". Спасибо более-менее понятно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2013, 12:03     EOF K&R
Еще ссылки по теме:

как поставить EOF? - C++
Ребят, подскажите пожалуйста. Итак, вот листинг программы. Если я открываю файл, созданный с помощью потока, все читается без проблем(я так...

Eof не находит конца - C++
string GetFileLine(fstream &amp;file) { char *atextv = new char; file.get(atextv, 255, '\n'); file.get(); string textv(atextv); ...

Не работает eof(). о__О - C++
в такой вот ситуации возвращает всегда ноль. даже в данном случае, когда на e: лежит чистый файл. #include&lt;conio.h&gt; ...

Печать значения EOF - C++
Упр.1.7. Керниган,Ритчи.Написать программу,печатающую значение EOF.Натолкните на мысль.Заранее благодарен.

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


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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
31.08.2013, 12:03     EOF K&R #9
Цитата Сообщение от Kontaktnik Посмотреть сообщение
Стало понятно, что EOF это не символ. Тогда как объяснить константу в виде -1 ? Типа 0 или -1 == false ?
По стандарту EOF может раскрываться в любое отрицательное число, не обязательно -1. Писать программы, полагаясь, что EOF == -1, — неправильно.
Yandex
Объявления
31.08.2013, 12:03     EOF K&R
Ответ Создать тему
Опции темы

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