2015-02-12 3 views
0

Я работаю над программой, которая должна читать из файла и хранить содержимое этого файла в векторе. Я должен прочитать содержимое файла .txt и переместить строки обратно в вектор до того, как он достигнет символа ''. Если это пробел, вы пропустите эту часть файла и продолжаете отбрасывать содержимое после пробела. Кто-нибудь знает, какую функцию использовать для чтения из файла и помещать содержимое в вектор или массив? Спасибо за ваше время.C++ чтение из файла в вектор

int main() 
{ 
    Code mess; 
    ifstream inFile; 
    inFile.open("message1.txt"); 
    if (inFile.fail()) { 
     cerr << "Could not find file" << endl; 
    } 
    vector<string> code; 
    string S; 
    while (inFile.good()) { 
     code.push_back(S); 
    } 
    cout << mess.decode(code) << endl; 
return 0; 
} 
+0

Вам нужно будет использовать FOPEN, fgets, fclose. Обязательно отправьте свой код, прежде чем задавать свой следующий вопрос. –

+7

Разделите проблему на части, не беспокойтесь о хранении в векторе или массиве, просто прочитайте файл и выведите строки. Подсказка: используйте cin или fgets (как говорит Майк) – pm100

+1

'while (inFile.good())' должно быть 'while (inFile >> s)', и это должно быть сделано. – vsoftco

ответ

0

Вы должны изменить свой код для чтения в

while (inFile >> S) { 
    code.push_back(S); 
} 

Ваш текущий код делает что-либо в вашей S переменной не читать.


Что касается условий цикла while (inFile.good()) увидеть этот Q & A Обратите:
Why is iostream::eof inside a loop condition considered wrong?

Использование std::iostream::good() более или менее одни и те же проблемы.

+0

Спасибо за помощь, что вы исправили мою проблему. Мне просто интересно, какая разница между inFile >> S и inFile.good(). –

+0

@MbusiHlatshwayo 'inFile.good()' просто проверяет состояние потока, но ничего не читает от него, а 'inFile >> S' делает. Последний оператор также возвращает ссылку на поток, и это проверено для состояния из-за неявного булевского преобразования, предоставляемого ['std :: istream :: operator bool'] (http://en.cppreference.com/w/cpp/IO/basic_ios/operator_bool). –

0

В принципе вы можете сделать это следующим образом:

std::ifstream fh("text.txt"); 
    std::vector<std::string> vs; 
    std::string s; 
    while(fh>>s){ 
      vs.push_back(s); 
    } 

    for(int i=0; i<vs.size(); i++){ 

      std::cout<<vs[i]<<std::endl; 
    } 
Смежные вопросы