Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2009, 13:27   #1
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию при чтении дважды выводится последний символ

Единственный вопрос вот кусок простейшего кода
Код:
while(!input.eof())
    {
    input.get(ch);
    cout<<ch;
    output.put(ch);
    }
почему то последний символ в файле,который для чтения,копируется дважды
помогите

Последний раз редактировалось Sazary; 21.07.2009 в 19:34.
pavelstraut вне форума Ответить с цитированием
Старый 21.07.2009, 17:39   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Вот:

Код:
#include<iostream.h>
#include<fstream.h>

int main()
{
ifstream in("D:\\temmpp.txt");
ofstream out("D:\\temmpp_1.txt");

char ch;

while(in.get(ch))
                   {
                                   cout << ch;
                                   out.put(ch);
                   }

cin.get();

return 0;
}

Последний раз редактировалось profi; 21.07.2009 в 18:03.
profi вне форума Ответить с цитированием
Старый 21.07.2009, 18:24   #3
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

не понял принципа работу
объясните плиз

еще вопрос
скажите что за фигня
когда я вот так читаю из файла
Код:
in2>>ch;
while(!in2.eof())
{

count2++;
in2>>ch;
}
все правильно
а когда вот так

Код:
while(!in2.eof())
{
in2>>ch;
count2++;

}
то он берет откуда-то лишние символы

Последний раз редактировалось Sazary; 21.07.2009 в 19:35.
pavelstraut вне форума Ответить с цитированием
Старый 22.07.2009, 12:58   #4
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

помогите кто-нибудь
pavelstraut вне форума Ответить с цитированием
Старый 22.07.2009, 13:11   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
все правильно
А потому что ты один "лишний" символ читаешь еще до начала цикла.
А счетчик счета увеличиваешь уже после чтения следующего символа при первой итерации, вот сравни:
Код:
in2>>ch;
count2++;
while(!in2.eof())
{
count2++;
in2>>ch;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.07.2009, 13:24   #6
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

нет
счетчик увеличивается после первого символ тоже
вот правильно работающий код
Код:
in2>>ch;
while(!in2.eof())
{
count++;
in2>>ch;
}
не пойму различия с тем который не работает(вот он)
Код:
while(!in2.eof())
{
n2>>ch;
count++;
}

Последний раз редактировалось Sazary; 22.07.2009 в 17:19.
pavelstraut вне форума Ответить с цитированием
Старый 22.07.2009, 17:25   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Тогда вот так измените:
Код:
while(!in.eof())
{
if(!(in>>ch)) break; // добавили проверку
out<<ch;
count++;
}
Лишний символ появляется потому, что при считывании последнего символа (символ конца файла), в ch остается последний символ, который был успешно прочитан. Как-то так.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.07.2009, 19:06   #8
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

вы можете обьяснить мне принципиальное различие двух программ код которых я написал
pavelstraut вне форума Ответить с цитированием
Старый 22.07.2009, 20:31   #9
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

также пожалуйста обьяните свой код
он работает так как нужно
pavelstraut вне форума Ответить с цитированием
Старый 23.07.2009, 01:39   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от pavelstraut
вы можете обьяснить мне принципиальное различие двух программ код которых я написал
Ну у меня оба ваших кода порождают лишний символ в конце.

А свой код я уже пояснил в предыдущем посте
Код:
if(!(in>>ch)) break;
Дословно: "если символ не прочитался, то выходим".
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка при чтении файла Alik-Soldier Общие вопросы C/C++ 1 31.05.2009 20:44
объясните почему рубится последний символ hen Общие вопросы C/C++ 4 07.04.2009 22:01
Проблема при чтении из файла Satorin Общие вопросы Delphi 2 17.12.2008 11:32
Ошибка при чтении БД из файла!! sting БД в Delphi 4 14.12.2008 22:23