C++ std::fstream。如何读取行首的数字(浮点数或整数),然后跳到下一个?使用命名变量所以没有循环
c++ std::fstream. How do I read a number at the start of the line (a float or an int), and then skip to the next? Using named variables so no loop
我有一个格式如下的文本文件:
100 #gravity
5000 #power
30 #fulcrum
我想将这些值分配给命名变量,如下所示:
void Game::reloadAttributes()
{
float test1, test2, test3;
string line;
std::fstream file;
file.open("attribs.txt");
if (file.is_open()) {
cin >> test1;
file.ignore(50, '\n');
cin >> test2;
file.ignore(50, '\n');
cin >> test3;
file.ignore(50, '\n');
file.close();
}
else
{
cout << "\n****Couldn't open file!!****\n" << endl;
}
cout << ">>>> " << test1 << ", " << test2 << ", " << test3 << endl;
}
当然,这些不是用于本地测试变量,而是在属于游戏的字段中class,只是使用这些来测试其正确读取。该程序只是挂在 cin >> test1。我试过事先使用 getLine(file, line),但没有用。我究竟做错了什么?干杯
istream
类型的对象(在本例中为 cin
)接受用户输入。所以程序当然会等你输入一个值,然后分别存入test1
、test2
、test3
里面。
要解决您的问题,只需将 cin
替换为 file
即可:
file >> test1;
file.ignore(50, '\n');
file >> test2;
file.ignore(50, '\n');
file >> test3;
file.ignore(50, '\n');
file.close();
输出:
>>>> 100, 5000, 30
您正在使用 cin
而不是 file
作为输入行。
代替cin >> test1;
,做file >> test1;
。那么它应该可以正常工作。
我有一个格式如下的文本文件:
100 #gravity
5000 #power
30 #fulcrum
我想将这些值分配给命名变量,如下所示:
void Game::reloadAttributes()
{
float test1, test2, test3;
string line;
std::fstream file;
file.open("attribs.txt");
if (file.is_open()) {
cin >> test1;
file.ignore(50, '\n');
cin >> test2;
file.ignore(50, '\n');
cin >> test3;
file.ignore(50, '\n');
file.close();
}
else
{
cout << "\n****Couldn't open file!!****\n" << endl;
}
cout << ">>>> " << test1 << ", " << test2 << ", " << test3 << endl;
}
当然,这些不是用于本地测试变量,而是在属于游戏的字段中class,只是使用这些来测试其正确读取。该程序只是挂在 cin >> test1。我试过事先使用 getLine(file, line),但没有用。我究竟做错了什么?干杯
istream
类型的对象(在本例中为 cin
)接受用户输入。所以程序当然会等你输入一个值,然后分别存入test1
、test2
、test3
里面。
要解决您的问题,只需将 cin
替换为 file
即可:
file >> test1;
file.ignore(50, '\n');
file >> test2;
file.ignore(50, '\n');
file >> test3;
file.ignore(50, '\n');
file.close();
输出:
>>>> 100, 5000, 30
您正在使用 cin
而不是 file
作为输入行。
代替cin >> test1;
,做file >> test1;
。那么它应该可以正常工作。