我刚刚开始使用C ++,我在一些练习题中遇到了一个问题,我无法弄明白。我需要能够以以下形式从控制台读取一行:
N A B C... etc.
其中N是数字,以下输入将根据N是不同的类型和不同的数量。
我的方法是阅读N然后根据N是什么来询问不同的输入。但是我必须接受单行上的所有输入,并且我无法获得任何形式的输入以在单个空格字符后终止。那么无论如何我可以在收到一个数字和一个空格字符后转到下一个语句?或者有更好的方法来解决这个问题吗?谢谢你的到来。
编辑:
好吧,我想我已经弄明白但我并不完全理解它,所以我将不得不研究istringstream。这就是我所拥有的。
vector<string> words;
string token, text;
getline(cin, text);
istringstream iss(text);
while ( getline(iss, token, ' ') ) {
words.push_back(token);
}
这是一个很好的方法吗,还是我应该采取另一种方法?如果有人能,你能为我解释这些问题吗?
while ( getline(iss, token, ' ') )
我猜这会在到达空格时返回true,同时用所有以前的字符填充令牌?
这个让我很困惑。
getline(cin, text);
答案 0 :(得分:3)
表达式cin >> n
将在第一个空格处停止,无论n
是数字类型还是字符串类型。我相信只要在scanf
或类似格式序列之后有空格,%d
也会这样做。
答案 1 :(得分:1)
您应该立即读取整行(根据要求),然后根据N,您的代码应检查输入的其余部分,以确保其格式正确或打印出错误。