0

我刚从 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);
4

2 回答 2

3

表达式cin >> n将在第一个空格处停止,无论n是数字类型还是字符串类型。我相信scanf会做同样的事情,只要在%d或类似的格式序列之后有一个空格。

于 2011-02-26T22:31:17.893 回答
1

您应该一次(按要求)阅读整行,然后根据 N,您的代码应该检查输入的其余部分,以确保其格式正确或打印出错误。

于 2011-02-26T22:32:58.273 回答