getLine () retorna linha vazia no eclipse, mas funcionando corretamente no dev c ++

StackOverflow https://stackoverflow.com/questions/2543057

  •  23-09-2019
  •  | 
  •  

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.

Foi útil?

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 /

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top