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

запись в файл - C++

Восстановить пароль Регистрация
 
KellyDink
1 / 1 / 0
Регистрация: 04.01.2012
Сообщений: 99
15.10.2013, 22:22     запись в файл #1
Добрый день,
я с С++ не очень дружу. подскажите пожалуйста почему у меня в файл записывается последний символ каждого файла 2 раза? когда я файлы открывала fopen - в конце каждого файла запись шла лишнего символа (в моем случае "я"). Повтор последнего символа уже лучше =D, но все-равно я не могу понять откуда он берется.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
char Y;
    ifstream in("D://1//2.txt", ios::in);
    ofstream out("D://1//out.txt", ios::out);
    ifstream in1("D://1//1.txt", ios::in);
while (in)
{
in >> Y;
out << Y;
 
}
while (in1)
{
in1 >> Y;
out << Y;
 
}
 
in1.close();
    in.close();
    out.close();
    _getch();
    return 0;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2013, 22:22     запись в файл
Посмотрите здесь:

C++ запись в файл
Запись в файл C++
C++ запись в файл
C++ запись в файл
Запись в файл C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 4
15.10.2013, 22:34     запись в файл #2
Попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
while (1)
{
    in >> Y;
    if(in) out << Y;
    else break;
}
while (1)
{
    in1 >> Y;
    if(in1) out << Y;
    else break;
}
Добавлено через 3 минуты
Лишний символ появляется, потому что выход из цикла появляется в начале тела цикла, а условие его окончания возникает уже в процессе выполнения тела цикла. Файл кончился, попытка чтения не удалась, но символ Y в выходной файл все равно пишется.
KellyDink
1 / 1 / 0
Регистрация: 04.01.2012
Сообщений: 99
15.10.2013, 23:19  [ТС]     запись в файл #3
Я тоже так думала, но я пробовала с do while , но результат остается прежним
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 4
15.10.2013, 23:24     запись в файл #4
Цитата Сообщение от KellyDink Посмотреть сообщение
но я пробовала с do while , но результат остается прежним
Конечно останется прежним. Условие выхода возникает в середине тела цикла. И нужно сразу выходить из цикла, а не выводить символ. Цикл еще можно так короче записать. Но это, наверно, менее понятно.
C++
1
while (in >> Y) out << Y;
KellyDink
1 / 1 / 0
Регистрация: 04.01.2012
Сообщений: 99
16.10.2013, 06:15  [ТС]     запись в файл #5
менее понятно =) но безумно круто!
мне так нравится, когда код оказываеццо можно упрощать до таких вот строчек =)
спасибо!
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 4
16.10.2013, 09:46     запись в файл #6
Цитата Сообщение от palva Посмотреть сообщение
выход из цикла появляется в начале тела цикла
Здесь у меня опечатка. Имелось в виду "проверяется в начале тела цикла".
Yandex
Объявления
16.10.2013, 09:46     запись в файл
Ответ Создать тему
Опции темы

Текущее время: 17:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru