32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
|
||||||
1 | ||||||
Лишний символ в конце при выводе через fgetc26.06.2012, 13:25. Показов 4652. Ответов 15
Метки нет (Все метки)
Выводится лишний символ "я" в самом конце текста, как бы я не изменял содержимое текстового файла
0
|
26.06.2012, 13:25 | |
Ответы с готовыми решениями:
15
Мусор при выводе не смотря на \0 символ в конце строки В выводе лишний символ, как избавится? Как убрать лишний пробел при выводе? Лишний символ при компиляции |
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|||||||||||
26.06.2012, 14:10 | 2 | ||||||||||
Надо сначала читать символ, потом проверять на конец файла, например так:
Добавлено через 1 минуту Вообще, если пишешь на С++, логичнее было бы воспользоваться std::ifstream .
1
|
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
|
|
26.06.2012, 14:35 [ТС] | 3 |
Да, просто изучаю сейчас работу с файлами в RTL для общего развития, спасибо за помощь.
0
|
26.06.2012, 14:43 | 4 |
И чем это отличается от кода ТС'а?
Добавлено через 2 минуты Кстати, "a+" - это открытие файла на дозапись, а тебе надо "r" - на чтение Добавлено через 2 минуты После замены "a+" на "r" я проблем не вижу - у меня без "я" работает
0
|
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
|
|
26.06.2012, 14:43 [ТС] | 5 |
0
|
26.06.2012, 14:45 | 6 |
А это и порождает проблему. Проверка feof тебе не показывает, что достигнут конец файла (т.к. файл на запись). Далее ты пытаешься читать из файла, обламываешься (fgetc возвращает тебе -1 и оно печатается как "я") и затем Feof начинает срабатывать, т.к. к файлу была операция чтения и теперь действительно есть конец файла. На на запись feof смысла не имеетт
1
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
26.06.2012, 14:46 | 7 |
0
|
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
|
|
26.06.2012, 14:48 [ТС] | 8 |
0
|
26.06.2012, 14:50 | 9 |
gore-lykovoe, почитай тут (включая ссылки, которые там приводятся): 10 вопросов по С. part1
У тебя всегда после чтения делается проверка. У ТС'а тоже (ибо после чтения мы придём в начало while и сделаем проверку). Но у ТС'а код более корректный, т.к. при пустом файле он отработает правильно. А твой - нет. Более того, твой код неправильно отработает, если в файле есть байт со значением 0 Добавлено через 1 минуту Тогда покажи в точности тот код, который исполняешь ты и приаттачь в точности тот же самый текстовый файл. А то что-то ненормально
1
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
26.06.2012, 14:52 | 10 |
0
|
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
|
||||||
26.06.2012, 14:57 [ТС] | 11 | |||||
0
|
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
|
|
26.06.2012, 15:17 [ТС] | 13 |
А у меня VS 2010 и "я" вставляет все равно, без "я" работает только первый код от "серой лисы", где мы прочитанный символ проверяем на совпадение с EOF.
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
26.06.2012, 15:26 | 15 |
0
|
26.06.2012, 15:33 | 16 |
Ну дык он же сначала на конец файла проверяет. И при пустом файле проверка сразу скажет "нет" и читать из файла ничего не будет
1
|
26.06.2012, 15:33 | |
26.06.2012, 15:33 | |
Помогаю со студенческими работами здесь
16
Лишний символ при работе со строками Как убрать запятую в конце при циклическом поштучном выводе слов? Исправить ошибку, при которой не работает cin после vector'a (лишний символ '\n' в потоке ввода) Убрать символ при выводе Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |