mercredi 26 août 2015

{C++} std::getline fails at reading file v.i.a ifstream

So, I created this code (using C++11 standards):

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
    string input;
    cout << "Enter the name of a file:\n";
    getline(cin, input);
    cout << "Reading file...\n";
    ifstream readstream(input);
    if (!readstream.is_open()) {
        cout << "Error while opening file\n";
        return 0;
    } else {
        char currentchar;
        while (getline(readstream, currentchar)) {
             cout << currentchar;
        }
        return 0;
   }
}

I compiled this code with the mingw-w64 implementation of GCC, with this command:

gcc -std=c++11 read.cpp -o read.exe

It compiled successfully, however, when I run it:

Enter the name of a file:
example.txt
Reading file...

And then nothing. It doesn't output any characters of the file. The file does exist, and it doesn't have any problems opening it. However, when I compile and run this code:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
    string input;
    cout << "Enter the name of a file:\n";
    getline(cin, input);
    cout << "Reading file...\n";
    ifstream readstream(input);
    if (!readstream.is_open()) {
        cout << "Error while opening file\n";
        return 0;
    } else {
        char currentchar;
        while (!readstream.eof()) {
          while(readstream.get(currentchar)) {
               cout << currentchar;
          }
        }
        return 0;
    }
}

It works. I compiled it the same way:

g++ -std=c++11 read.cpp -o read.exe

But instead of using getline(), I used ifstream.get();

Can anyone tell me why getline() does not work in this situation?

Aucun commentaire:

Enregistrer un commentaire