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

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

Войти
Регистрация
Восстановить пароль
 
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
#1

Вопрос по работе с файлами - C++

20.07.2010, 19:21. Просмотров 550. Ответов 5
Метки нет (Все метки)

Пока i-=2 не вставил, выводила пустую строку в результате. Почему так? Что за 2 знака перед eof() мешали?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int main(int argc, char* argv[])
{
    long i;
 
    fstream fio("reverse.txt", ios::in|ios::out|ios::binary);
 
    if (!fio)
    {
        cout<<"File openning error!\n";
        return 1;
    }
 
    char ch;
 
    for (ch = 'a'; ch <= 'z'; ch++)
        fio<<ch<<' ';
    
    fio.seekg(0,ios::end);
    
    i = (long) fio.tellg();
 
    i-=2;
 
    for(; i >= 0; i--)
    {
        fio.seekg(i, ios::beg);
        fio.get(ch);
        cout<<ch;
        //if (fio.eof()) continue;
    }
 
    cout<<endl;
 
    fio.close();
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2010, 19:21     Вопрос по работе с файлами
Посмотрите здесь:

Маленький вопрос по работе с файлами - C++
очень глупый к тому же) есть FILE * f=fopen(filename,&quot;r&quot;); FILE* F; как мне присвоить*F=*f? заранее спасибо)

Вопрос по работе с файлами в Visual Studio - C++
Написал программу для работы с файлом в Visual Studio. Iostream подключил. Но такие вот привычные записи, как, например, ifstream...

Вопрос по работе с массивами - C++
Уважаемые! Пишу программу на Си разбиения текста на страницы, возник вопрос как в двумерный массив после каждой десятой строки вставить...

Совет по работе с файлами - C++
надо написать программу, которая считывает данные из текстового файла в структуру с 4-мя полями, типа однонаправленный список, а потом...

Подскажите по работе с файлами - C++
struct MyStruct { char * Nam; unsigned int Salary; }; MyStruct emp; *emp.Nam=&quot;Ivan Ivanov&quot;; emp.Salary=109000; ...

Дополнение к работе с файлами - C++
Здравствуйте, ситуация довольно глупая, но умудрились почти поссориться с товарищем из группы. Вот кусок кода #include &lt;iostream&gt; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aaxenon
Light Knight
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
20.07.2010, 19:54     Вопрос по работе с файлами #2
C++
1
        for(; i >= 0; i--)
а почему начального условия в цикле нет О.о
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
20.07.2010, 20:15  [ТС]     Вопрос по работе с файлами #3
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
C++
1
        for(; i >= 0; i--)
а почему начального условия в цикле нет О.о
Такое возможно , т.к. оно уже задано
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
20.07.2010, 21:55     Вопрос по работе с файлами #4

Не по теме:

Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
а почему начального условия в цикле нет О.о
ну да...



Добавлено через 36 минут
Почему так?
Даже и не знаю... Есть одна идейка.
Есть два перегруженных метода seekg():
C++
1
2
3
4
5
6
7
basic_istream<Elem, Tr>& seekg(
    pos_type pos
);
basic_istream<Elem, Tr>& seekg(
    off_type off,
    ios_base::seekdir way
);
Ты используешь второй метод: seekg(off_type off, ios_base::seekdir way). Вот что по этому поводу говорит microsoft:
Do not use the second member function with text files, because Standard C++ does not support relative seeks in text files.
- т.е. не использовать вторую функцию-член с текстовыми файлами, потому что Standard C++ не поддерживает относительный поиск в текстовых файлах.

Добавлено через 53 минуты
Странно, в книжке у Эккеля используется относительный поиск в текстовых файлах...

Добавлено через 4 минуты
Кажется, я понял, что к чему. Курсор в потоках указывает на следующий элемент, который может быть прочитан. Т.е., после записи в цикле последнего символа (символ пробела), курсор указывает на позицию за этим символом. Значит, относительное смещение -1 от конца (или, как в данном случае, текущей позиции курсора) файла будет указывать на символ пробела, а смещение -1 на символ 'z'. Поэтому и нужна была эта запись:
C++
1
i-=2;
PS. Это все мои домыслы, могу и ошибаться

Добавлено через 1 минуту
Немного переделал твой пример, так чтобы от переменной i можно было избавиться:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <fstream>
#include <iostream>
#include <string>
 
int main()
{
    std::string filename("reverse.txt");
    std::fstream io(filename.c_str(), std::ios::in | std::ios::out | std::ios::trunc);
 
    if (!io)
    {
        std::cout << "Error opening file \"" << filename << "\"" << std::endl;
        system("pause");
        return EXIT_FAILURE;
    }
 
    char ch;
 
    for (ch = 'a'; ch <= 'z'; ch++)
            io << ch << ' ';
    
    io.seekg(-2, std::ios::cur);
    do
    {
        io.get(ch);
        std::cout << ch;
        io.seekg(-2, std::ios::cur);
    }
    while(io.tellg() >= 0);
    std::cout << std::endl;
    system("pause");
    return EXIT_SUCCESS;
}
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.07.2010, 22:17     Вопрос по работе с файлами #5
alexsvk, держи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
 
int main() {
  std::fstream stream("reverse.txt");
 
  for (char ch = 'a'; ch <= 'z'; ++ch)
    stream << ch <<' ';
 
  for (int pos = static_cast<int>(stream.tellg()) - 1; pos >= 0; --pos) {
    stream.seekg(pos);
    std::cout << static_cast<char>(stream.get());
  }
 
  std::cout << std::endl;
 
  return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2010, 23:02     Вопрос по работе с файлами
Еще ссылки по теме:

Информация по работе с бинарными файлами - C++
У меня возникла проблема при работе с бинарными файлами, вернее нет инфо чтоб почитать, да и хелп скуден, вышлите по мылу или скиньте сюда...

Ошибка при работе с файлами - C++
Всем привет! Подккажите, плиз, что у меня неправильно в коде: #include &lt;cstdlib&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...

Проблемы при работе с файлами - C++
доброго времени! возник у меня маленький трабл при работе с файлами. Причем совершенно не могу понять причину. Код такой: int...

Ошибка при работе с файлами - C++
Необходимо, создать текстовый файл со случайным именем в диапазоне 8 символов, латиница. Вот код: int main() { ...

программа по работе с текстовыми файлами - C++
Необходимо написать программу,которая считывает текст из файла и выводит его на экран,меняя местами каждые 2 соседних слова. часть...

Вопрос по работе с циклом на легком примере. - C++
Имеется задача. Ввести сумму заработанную продавцом за месяц, взять от неё 9% и прибавить к основной зарплате (200 баксов). Продавцов...


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

Или воспользуйтесь поиском по форуму:
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
20.07.2010, 23:02  [ТС]     Вопрос по работе с файлами #6
Да, просто без i-=2 она не работала. Спасибо за примеры.
Yandex
Объявления
20.07.2010, 23:02     Вопрос по работе с файлами
Ответ Создать тему
Опции темы

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