我想知道我是否使用正确的表单将命令排成一行,然后由某些if
获取每个命令所需的信息。这是我的代码的一部分;实际上,我main
函数的第一部分:
string line;
stringstream ss;
while (!cin.eof())
{
getline(cin, line);
//i dont know if next line should be used
ss << line;
if (line.size() == 0)
continue;
ss >> command;
if (command == "put")
{
string your_file_ad, destin_ad;
ss >> your_file_ad >> destin_ad;
//baraye history ezafe shod
give_file(your_file_ad, p_online)->index_plus(command);
答案 0 :(得分:-1)
我尝试在cout
中使用另外两个if
来运行您的代码,以查看用户输入put a b
时会发生什么。
所以,这是我的代码:
string line;
stringstream ss;
while (true)
{
getline(cin, line);
//i dont know if next line should be used
ss << line;
if (line.size() == 0)
continue;
string command;
ss >> command;
if (command == "put")
{
string your_file_ad, destin_ad;
ss >> your_file_ad >> destin_ad;
cout << "input #1 is " << your_file_ad << endl;
cout << "input #2 is " << destin_ad << endl;
}
}
当我运行此代码时,如果我在控制台中编写put a b
,我会看到这个结果,这是正确的:
input #1 is a
input #2 is b
但似乎仅适用于第一个命令。之后,命令无法正确处理。
所以,我再次阅读了代码,发现问题是,您正在暂时初始化stringstream
。
我不确定为什么它不起作用(可能已经达到了EOF并且不能再继续阅读了?),但是如果你在一段时间内移动stringstream ss;
,那么&# #39; ll正常工作:
string line;
while (true)
{
stringstream ss;
getline(cin, line);
//i dont know if next line should be used
ss << line;
if (line.size() == 0)
continue;
string command;
ss >> command;
if (command == "put")
{
string your_file_ad, destin_ad;
ss >> your_file_ad >> destin_ad;
cout << "input #1 is " << your_file_ad << endl;
cout << "input #2 is " << destin_ad << endl;
}
}
更新:阅读下面关于第一个代码问题的@LightnessRacesinOrbit评论。