我正在编写这个非常简单的程序,它使用文件来解决问题世界。请记住,我希望你好和世界分开。
这是以下代码:
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,而不是ofstream或ifstream(我正在尝试了解fstream如何工作,但是我发现有点麻烦)。
我的编译器是最新的VS。
答案 0 :(得分:1)
您有两行代码:
someOtherFile << "hello" << std::endl;
someOtherFile << "world" << std::endl;
他们将2行字符串放入file.dat:
// file.dat
hello
world
功能&#34; getline()&#34;从文件中只获得一行。 &#34; seekg&#34;函数将读取位置设置为文件的第一行:其中包含&#34; hello&#34;。
如果你想阅读文件的末尾:然后替换:
std::getline(someOtherFile, content);
std::cout << content << std::endl;
使用:
while (!someOtherFile.eof())
{
std::getline(someOtherFile, content);
std::cout << content << std::endl;
}
如果您只想要特定的行,请使用计数器变量。
顺便说一句,我只是假设你打算把变量&#34; content&#34;在哪里&#34;名称&#34;是
答案 1 :(得分:1)
getine
函数每次只读一行,因此您应该调用getline
直到文件末尾。下面的代码可以帮助您。
#include <iostream>
#include <fstream>`
#include <string>
using namespace std;
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);
while(std::getline(someOtherFile, content))
{
std::cout << content << std::endl;
}
return 0;
}
答案 2 :(得分:0)
std :: getline只从特定文件中获取一行文本。正如http://www.cplusplus.com/reference/string/string/getline/?kw=getline所说:
istream& getline (istream& is, string& str);
从
is
中提取字符并将其存储到str
中,直到找到分隔字符分隔符(或换行符,'\ n',(2))。
答案 3 :(得分: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只获取文件中的一行。要获得下一行,您需要再次拨打电话。
答案 4 :(得分: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;
}
这将打印您想要的答案