Как исправить чтение из файла после использования функции std :: cin - PullRequest
2 голосов
/ 05 июня 2019

У меня проблема с кодом C ++.

Когда я запускаю этот код:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    string s;
    string line;
    fstream file("file.txt", ios::out | ios::in | ios::app);

    cout << "enter your text  :";
    cin >> s;
    file << s;
    cout << "\ndata file contains :";

    while(getline(file, line))
    {
        cout << "\n" << line;
    }
    cout << "\n";
    system("pause");
    return 0;
}

Вывод должен быть:

enter your text : alikamel // for example
then write it to file
data file contains : // file contents

Но я получаю это вместо:

enter your text : ass // for example
and it write it to file
then display
data file contains : // nothing ??

Почему не отображается содержимое файла, что не так?

Ответы [ 2 ]

2 голосов
/ 05 июня 2019

Ваша проблема в том, что вы пытаетесь прочитать из конца файла.

fstream содержит указатель на текущую позицию в файле.После завершения записи в файл этот указатель указывает на конец, готовый к следующей команде записи.

Итак, когда вы пытаетесь читать из файла без перемещения указателя, вы пытаетесь прочитать изконец файла.

Вам нужно использовать seekg, чтобы перейти к началу файла, чтобы прочитать то, что вы написали:

file << s;
cout << "\ndata file contains :";

file.seekg(0);

while(getline(file, line))
{
    cout << "\n" << line;
}
1 голос
/ 05 июня 2019

Я предполагаю, что файл пуст, в этом случае вы можете сделать что-то вроде этого

    fstream file("TestFile.txt", ios::out); 

    cout << "enter your text  :";
    cin >> s;                          // Take the string from user 
    file << s;                         // Write that string in the file
    file.close();                      // Close the file

    file.open("TestFile.txt",ios::in);
    cout << "data file contains :" << endl;
    while(getline(file, line)) {       //Take the string from file to a variable
        cout << line << endl;          // display that variable
    }
    file.close();
    cin.get();

И в качестве одного из комментариев упоминается ... вы можете использовать ifstream и ofstream а также для лучшей защиты от солнца

...