2015-11-08 3 views
0

Я создаю программу, в которой вы можете войти и зарегистрироваться. Все данные хранятся в TXT-файле. Проблема, которую я сейчас имею в том, что, когда я пытаюсь получить все данные из файла, я получаю только первую строку/строку файла. Я хочу получить все в .txt. Вот код:C++ Reading Everything from .txt

Что в .txt:

hello:world 
foo:bar 
usr:pass 

кода (как испытание):

ifstream check; 
check.open("UsrInfo.txt"); 

string dataStr; 
getline(check, dataStr); 

cout << dataStr; 
cout << endl; 

Выход:

hello:world 

То, что я хочу, выход :

hello:world 
foo:bar 
usr:pass 

Что я могу сделать, чтобы исправить это? Благодаря!

+0

Возможный дубликат [Читать строку файла построчно] (http://stackoverflow.com/questions/7868936/read-file-line-by-line) – soon

+1

'Я только получить первый line' У вас рассмотрел повторение той же операции для других линий? [Окончательное руководство и список книг на C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) может помочь. – Drop

ответ

5

Вы должны были бы поставить его через петлю и читать построчно

#include <iostream> 
    #include <fstream> 
    #include <string> 
    using namespace std; 

    int main() { 
    string line; 
    ifstream check ("example.txt"); 
    if (check.is_open()) 
    { 
     while (getline (check,line)) 
     { 
     cout << line << '\n'; 
     } 
     check.close(); 
    } 

    else cout << "Unable to open file"; 

    return 0; 
    } 
-2

GetLine получает один линию, если вы хотели бы получить больше, то одна линия попробовать это;

std::string Line, Result; 
while (true){ 
    getline(check, Line); 
    if (!check.eof()) 
    Result.append(Line), Result.push_back('\n'); 
    else 
    break; 
} 
+0

[Хотя не работает почти никогда не работает] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) и не будет здесь. Оператор запятой почти наверняка не тот, который вы хотите использовать здесь. Должен работать, но очень плохой стиль кодирования, который не стоит преподавать или подражать из-за количества способов злоупотребления запятой, может молча торпедировать программу. Просто используйте точку с запятой. – user4581301

+0

Как вы думаете, это исправит? – user4578093

+1

Рекомендуем 'while (getline (check, Line))' вместо 'while (true)'. 'getline' возвращает ссылку на используемое iostream, а iostream реализует логический оператор, который возвращает true, если поток доступен для чтения, а не в состоянии ошибки. 'Result.append (Line), Result.push_back ('\ n');' ничего не получает от ','. Пойдите для ясности и используйте ';', или 'Result.append (Line +" \ n ");' – user4581301