Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/55: Рейтинг темы: голосов - 55, средняя оценка - 4.56
0 / 0 / 1
Регистрация: 29.07.2009
Сообщений: 119

"я" это EOF?!

23.04.2010, 16:50. Показов 11001. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня получился такой прокол - прога читает текст из файла, циклом, посимвольно, и букву "я" принимает за EOF! Догадываюсь, это идёт от того, что Ctrl+Z символ EOF. Как это обойти, подскажите, плз!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.04.2010, 16:50
Ответы с готовыми решениями:

EOF что это
В книге встречается записи типа ..если встретится указанный символ-ограничитель, по умолчанию это EOF... Что за EOF?

EOF или eof() - путаюсь
Не могу понять в каких случаях нужно использовать EOF, а в каких eof(). В связи с этим путаюсь, в примерах везде пишут по разному....

Существует ли EOF или это миф?
Собственно говоря, раньше у меня этот вопрос сомнений не вызывал. Есть файл- есть конец файла и умные проги автоматом добавляют в конец ff ...

12
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
23.04.2010, 18:58
Открывай файл в бинарном режиме.
0
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
23.04.2010, 19:24
AlexRyzhenko, Странно это. Всю жизнь читал из файла посимвольно, никогда такого не встречал.
EOF - это -1
Ты читаешь через getc ?
А кому присваиваешь? Надо - int-у, его проверять на EOF, а уж потом этот int класть в char.
Попробуй.

Добавлено через 3 минуты
CheshireCat, бинарный тут скорее всего ни при чем. Текстовой от него отличается только тем что , перевод строки с возвратом каретки объединяет в один символ
0
0 / 0 / 1
Регистрация: 29.07.2009
Сообщений: 119
23.04.2010, 21:27  [ТС]
Day, спасибо! Работает! А что можно без преобразования присваивать элементу строки значение переменной int?

Добавлено через 1 час 43 минуты
А с другим кимпилятором опять тоже самое...
0
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
23.04.2010, 21:44
Цитата Сообщение от AlexRyzhenko Посмотреть сообщение
Day, спасибо! Работает! А что можно без преобразования присваивать элементу строки значение переменной int?
Конечно!
Это прописано в самом начальном (K&R) определении С
Могуть быть потеряны знаки, но в данном случае мы-то знаем, что все будет ОК.

А с другим кимпилятором опять тоже самое...
Любопытно, с какими кимпиляторами ты работал?
Вообще-то там могут самые разные чудеса.
0
0 / 0 / 1
Регистрация: 29.07.2009
Сообщений: 119
24.04.2010, 09:47  [ТС]
Ещё один прикол в том что MinGW всё норм, а в MinGW Developer Studio - эти чудеса. А мне в курсовой желательно обойтись без чудес... Больше попробывать негде.. BDS2009 - один большой глюк. Можно ставить большую Я, но как-то странно выглядит тогда.

Добавлено через 11 часов 23 минуты
Рабочий вариант такой - проверять не
C
1
с != EOF
а
C
1
!feof(f)
. Тогда, вроде на "я" не спотыкается!
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.04.2010, 13:44
Цитата Сообщение от AlexRyzhenko Посмотреть сообщение
Day, спасибо! Работает! А что можно без преобразования присваивать элементу строки значение переменной int?
Проблема вовсе не в том, можно или нельзя присваивать. Проблема в том, что ты работаешь, судя по всему, через функции типа fgetc. Эта функция должна уметь делать две вещи: возвращать текущий прочитанный байт (коих может быть 256 различных значений) и возвращать признак конца файла (ещё одно значение). Итого функция должна уметь возвращать 257 различных значений. Количество этих значений не влезает в тип char, а потому функция возвращает int. Эта одна из распространённых ошибок новичков - результат функции читают в переменную типа char, а не int. int'овое к конечном итоге трактуется так, что значений 0-255 соотвествуют байту, а специально выделенное значение EOF (которое обычно равно -1 или, что то же самое, 0xffffffff) кодирует признак окончания файла

Цитата Сообщение от AlexRyzhenko Посмотреть сообщение
Ещё один прикол в том что MinGW всё норм, а в MinGW Developer Studio - эти чудеса. А мне в курсовой желательно обойтись без чудес... Больше попробывать негде.. BDS2009 - один большой глюк. Можно ставить большую Я, но как-то странно выглядит тогда.
Ещё одно типичное свойство начинающих: не разобравшись, что и как должно работать, начинают обвинять компилятор, разработчиков компилятора, операционную систему, Билла Гейтса. Короче, кого угодно, но только не себя самого

Добавлено через 2 минуты
Цитата Сообщение от AlexRyzhenko Посмотреть сообщение
Рабочий вариант такой - проверять не
Пример вот здесь Загрузка картинок в формате .jpg и .gif
Всё работает. Только в твоём случае строку 6 заменить на что-то типа "printf ("%c", ch);" (а строку 3, соотвественно, выкинуть)
2
0 / 0 / 1
Регистрация: 29.07.2009
Сообщений: 119
24.04.2010, 15:00  [ТС]
Evg, что-то Вы понаписали непонятно что. Во-первых, я читаю просто getc(). Во-вторых, что конкретно Вы хотели, сказать про EOF, я не понял. В-третих, никого я не объвиняю. Им на мои обвинения чихать, да и мне от этого не легче. Вы знаете в чём различия, тогда просветите! Воду лить все умеют. И пречём тут буква "я", Вы тоже, по-моему не знаете. А она причём, сто пудов.
0
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
24.04.2010, 15:29
Цитата Сообщение от AlexRyzhenko Посмотреть сообщение
Evg, что-то Вы понаписали непонятно что. Во-первых, я читаю просто getc(). Во-вторых, что конкретно Вы хотели, сказать про EOF, я не понял.
Ну, это только тебе непонятно
Тебе дали очень подробное и грамотное объясненение механизма, а ты еще чем-то недововолен.
Учись!
а. Скромности и уважению к людям, которые поболее твоего знают.
б. Программированию
0
0 / 0 / 1
Регистрация: 29.07.2009
Сообщений: 119
24.04.2010, 15:59  [ТС]
Day, да я согласен, но разве с "я" и различиями комляторов стало понятней? Если мне не стало, я так и говорю "мне не понятно". Проехали.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.04.2010, 16:04
Цитата Сообщение от AlexRyzhenko Посмотреть сообщение
Вы знаете в чём различия, тогда просветите!
Выше я обо всём подробно написал

Цитата Сообщение от AlexRyzhenko Посмотреть сообщение
И пречём тут буква "я", Вы тоже, по-моему не знаете. А она причём, сто пудов.
Буква "я" имеет код 255 (0xff В 16-ричном виде). EOF имеет код -1 (0xffffffff в 16-ричном виде). Если результат функции getc (fgetc) записать в переменную типа char, то в переменной окажется значение 0xff. Далее ты это значение сравниваешь с EOF (c == EOF). EOF имеет тип int, поэтому переменная типа char перед выполнением сравнения будет приведена к типу int, т.е. 0xff при расширении до int'а превратится в 0xffffffff, что совпадёт со значением EOF

Добавлено через 1 минуту
Цитата Сообщение от AlexRyzhenko Посмотреть сообщение
В-третих, никого я не объвиняю
ну-ну...

Цитата Сообщение от AlexRyzhenko Посмотреть сообщение
BDS2009 - один большой глюк
0
0 / 0 / 1
Регистрация: 29.07.2009
Сообщений: 119
24.04.2010, 16:27  [ТС]
Спасибо. Теперь понятно с "я". Но MinGW DS и с int'ом не распознаёт эту букву... Но это ладно, выше я привёл нормальный вариант.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.04.2010, 16:36
Цитата Сообщение от AlexRyzhenko Посмотреть сообщение
Но MinGW DS и с int'ом не распознаёт эту букву...
С учётом того, что ты до сих пор так и не показал свои исходники, что-то конкретного сказать тут нечего
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.04.2010, 16:36
Помогаю со студенческими работами здесь

Что это за фишка языка? s+=i[a]; почему это вообще работает? Где про это прочитать?
#include <iostream> using namespace std; int main() { int a={1,2,3,4,5}; int s=0; for(int i=0;i<5;i++) ...

mc68hc908 - это что это, это с чем это ??
Здравствуйте люди местные. Сам я мучаю АВР-ки, но для других я "типа" гуру, и вот пришли ко мне и спросили - а что есть сабж, и как его...

!=EOF
В книге дается пример для подсчета символов #include<stdio.h> main() { long nc; nc=0; while(getchar()!=EOF) ++nc; ...

EOF
Как сделать чтение файла до конца самого файла, а не до конца определенных символов: while (a != EOF); тут как я понимаю система читает...

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru