Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Текстовый режим и файловые потоки 
V
    Опции темы
marknew
Дата 12.1.2020, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.1.2008

Репутация: нет
Всего: нет



Хотел написать самый простейший редактор, но вышло не очень.. Непонятны следующие моменты:
1. Как в текстовом режиме включить, чтобы файловый поток поддерживал как ввод так и вывод?
    fstream fout(filename, ios::in, ios::out); работает некорректно, не очищает остатки файла, т.е. остается мусор от предыдущих записей.
2. Если зайти в программу и сразу выбрать пункт два, то данные прочитаются нормально, если же сначала выбрать пункт 1 и осуществить запись, а затем выбрать пункт два, то ничего не выводится.
    Подправьте, пожалуйста, добавьте чего не хватает, вот мой быдлокод:
   
Код

#include <iostream>
#include <fstream>
using std::cin;
using std::cout;
using std::endl;
using std::ios;
using std::fstream;
//using std::ofstream;
//using std::ifstream;

int get_int (int default_value);

int main() {
    system("chcp 1251 > nul");
    setlocale (LC_ALL, "Russian");

    int age, menu;
    char name[21];
    char filename[81];
    char input_line[111];

    cout << "Enter a file name and press ENTER: ";
    cin.getline(filename,80);
    cout << endl;

    fstream fout(filename, ios::out | ios::in);
        
    if (! fout) {
        cout << "File " << filename;
        cout << " could not be opened." << endl << endl;
        system("pause");
        return -1;
    }

    while(1) {
          cout << "                   МЕНЮ ПРОГРАММЫ:" << endl;
          cout << "1. Сохранить запись" << endl;
          cout << "2. Прочитать запись" << endl;
          cout << "3. Выйти из программы" << endl << endl;

          cout << "Введите пункт меню (1-3) и нажмите Enter: ";
          menu = get_int(3);
          cout << endl;
    
          if (menu == 1) {
              cout << "File " << filename << " was opened." << endl;
              
              while(1) {
                    cout << "Enter name (@@@  to quit): ";
                    cin.getline(name,20);
              
                    if (strcmp(name, "@@@") == 0) {
                        cout << endl;
                        break;
                    }
              
                    cout << "Enter age and press ENTER: ";
                    age = get_int(0);
                    cout << endl;
              
                    fout << name << " " << age << endl;
              }
          
          } else if (menu == 2) {
                     while(1) {
                           fout.getline(input_line, 110);
                           cout << input_line << endl;
                                  
                           if (fout.eof())
                               break;
                     }
          } else {
              cout << "Спасибо, до свидания!" << endl;
              break;
          }
    }

    fout.close();
    
    cout << endl;
    system("pause");
    return 0;
}

int get_int (int default_value) {
    char s[81];
    cin.getline(s,80);

    if (strlen(s) == 0)
        return default_value;

    return atoi(s);
}



PM MAIL   Вверх
kapbepucm
Дата 13.1.2020, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Цитата(marknew @  12.1.2020,  14:30 Найти цитируемый пост)
если же сначала выбрать пункт 1 и осуществить запись, а затем выбрать пункт два, то ничего не выводится.
После выполнения записи файловый указатель находится в конце и, соотвественно, прочитать ничего не получится, так как впереди больше нет байтов. Можно поиграться с методом seekg, например, поместить указатель в начало файла, ну или в начало последней записи.

Это сообщение отредактировал(а) kapbepucm - 13.1.2020, 13:13


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
mitchellee95
Дата 24.1.2020, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 24.1.2020

Репутация: нет
Всего: нет



Here it's easy to get your doubts clear when you are a beginner
PM MAIL WWW   Вверх
Morfoid
Дата 22.2.2020, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.3.2015

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1437 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.