2015-07-29 3 views
0

Я пишу эту очень простую программу, которая позволяет приветствовать мир, используя файлы. Имейте в виду, я хочу, чтобы привет и мир были на отдельных линиях.не может получить файл для корректного вывода

здесь следующий код:

int main() 
    { 


     std::ofstream someFile("file.dat"); 
     someFile << "" << std::endl; 

     std::fstream someOtherFile("file.dat",ios::in | ios::out); 

     std::string content; 

     someOtherFile << "hello" << std::endl; 
     someOtherFile << "world" << std::endl; 
     someOtherFile.seekg(0, ios::beg); 
     std::getline(someOtherFile, content); 
     std::cout << content << std::endl; 
     return 0; 


     } 

однако, всякий раз, когда я запустить следующую программу, она только печатает «привет».

любая помощь будет принята с благодарностью, и ПОЖАЛУЙСТА, дайте пример, используя fstream, а не streamstream или ifstream (я пытаюсь узнать, как работает Fstream, однако нахожу немного неприятностей).

мой компилятор - последний VS.

+0

вы не закрывались file.dat и просит, чтобы открыть второй раз. Это намеренно? –

+0

Я не думаю, что этот код будет скомпилирован, поэтому я сомневаюсь, что это код, с которым вы фактически сражаетесь. Я могу догадаться, в чем проблема, но без реального кода я могу только догадываться. – Beta

+0

код компилируется в порядке, выход только некорректен. – BeepBoop

ответ

1

getine функция только чтение одной строки за один раз, поэтому вы должны позвонить getline до конца файла. Код ниже может помочь вам.

#include <iostream> 
 
#include <fstream>` 
 
#include <string> 
 
using namespace std; 
 
int main() 
 
{ 
 

 

 
\t std::ofstream someFile("file.dat"); 
 
\t someFile << "" << std::endl; 
 

 
\t std::fstream someOtherFile("file.dat",ios::in | ios::out); 
 

 
\t std::string content; 
 

 
\t someOtherFile << "hello" << std::endl; 
 
\t someOtherFile << "world" << std::endl; 
 
\t someOtherFile.seekg(0, ios::beg); 
 
\t while(std::getline(someOtherFile, content)) 
 
\t { 
 

 
\t \t std::cout << content << std::endl; 
 
\t } 
 
\t 
 
\t return 0; 
 
}

+0

Спасибо, очень помогает – BeepBoop

0

std :: getline получает только одну строку текста из определенного файла. Как http://www.cplusplus.com/reference/string/string/getline/?kw=getline говорит:

istream& getline (istream& is, string& str);

извлекает символы из is и сохраняет их в str до размежевания характер DELIM не найден (или символ новой строки '\ п', для (2)).

0

Добавить еще один getline (..) и инструкцию cout после первого набора getline и cout. вы получите мир как результат.

someOtherFile << "hello" << std::endl; 
     someOtherFile << "world" << std::endl; 
     someOtherFile.seekg(0, ios::beg); 
     std::getline(someOtherFile, content); 
     std::cout << content << std::endl; 
std::getline(someOtherFile, content); 
     std::cout << content << std::endl; 

getline получает только одну строку в файле. Чтобы получить следующую строку, вам нужно позвонить еще раз.

0
#include<fstream> 
#include<iostream> 

using namespace std; 

    int main() 
    { 


     std::ofstream someFile("file.dat"); 
     someFile << "" << std::endl; 

     someFile.close(); 

     std::fstream someOtherFile("file.dat",ios::in | ios::out); 

     std::string content; 

     someOtherFile << "hello "; 
     someOtherFile << "world" << std::endl; 
     someOtherFile.close(); 

     someOtherFile.seekg(0, ios::beg); 
     std::getline(someFile1, content); 
     std::cout << content << std::endl; 

     someFile1.close(); 
     return 0; 


     } 

Это напечатает ваш желаемый ответ

+0

Спасибо за ответ – BeepBoop

1

У вас есть 2 строки кода:

someOtherFile << "hello" << std::endl; 
someOtherFile << "world" << std::endl; 

Они положили 2 линии строк в file.dat:

// file.dat 
hello 
world 

Функция «getline()» получает только 1 строку из файла. И функция «seekg» устанавливает позицию чтения в первую строку файла: содержит «привет».

Если вы хотите прочитать до конца файла: замените:

std::getline(someOtherFile, content); 
std::cout << content << std::endl; 

с:

while (!someOtherFile.eof()) 
{ 
    std::getline(someOtherFile, content); 
    std::cout << content << std::endl; 
} 

Или использовать переменную счетчика, если вы просто хотите, чтобы определенные строки.

Кстати, я просто предполагаю, что вы хотели поставить переменную «контент», где «имя».

Смежные вопросы