getLine () retorna linha vazia no eclipse, mas funcionando corretamente no dev c ++
Pergunta
Aqui está o meu código:
#include <iostream>
#include <stdlib.h>
#include <fstream>
using namespace std;
int main() {
string line;
ifstream inputFile;
inputFile.open("input.txt");
do {
getline(inputFile, line);
cout << line << endl;
} while (line != "0");
return 0;
}
conteúdo input.txt:
5 9 2 9 3
8 2 8 2 1
0
Em Enclipse, ele vai para um loop infinito. Estou usando o Mingw 5.1.6 + Eclipse CDT.
Eu tentei muitas coisas, mas não consegui encontrar o problema.
Solução
Desde que você está no Windows, tente:
} while (line != "0\r");
A última linha é armazenada como "0\r\n"
. o \n
é usado como delimitador de linha por getline, para que a linha real seja "0\r"
ou
Você pode converter o arquivo de formato DOS em formato Unix usando o comando
dos2unix input.txt
Agora seu programa original deve funcionar. O comando mudará o \r\n
no final da linha para \n
Além disso, você deve sempre fazer erro de verificação depois de tentar abrir um arquivo, algo como:
inputFile.open("input.txt");
if(! inputFile.is_open()) {
cerr<< "Error opening file";
exit(1);
}
Outras dicas
Ele criará um loop infinito se nenhuma linha contiver exatamente 0
. Por exemplo 0\n
não é a mesma coisa que 0
. Meu palpite é que esse é o seu problema.
EDIT: Para elaborar, GetLine deve estar descartando a nova linha. Talvez a nova linha de codificação do seu arquivo esteja errada (ou seja, Windows vs. Unix).
Felizmente alguém fez isso em seu blog para mim. https://electrovoid.wordpress.com/2012/05/03 / pps-hide-show-detalhes /