【问题标题】:Terminating input after a ' ' (space) character在 ' '(空格)字符后终止输入
【发布时间】:2011-02-27 12:53:30
【问题描述】:

我刚开始使用 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);

【问题讨论】:

    标签: c++ input space delimiter terminate


    【解决方案1】:

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

    【讨论】:

    • 也许我忘了测试这个,但是这会移动到下一行代码而不点击返回吗?我目前无法自己测试。
    • @Kzone272 – 它会一直阻塞直到你按下回车键,但它只会占用n 的第一个令牌。该行的其余部分将被缓冲以供以后输入。
    【解决方案2】:

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

    【讨论】:

    • 但是我如何在不使用 getline() 和字符串类型或其他东西的情况下读取一行不同数量的输入?
    • 您可以读入整行(不知道他们输入了多少输入),然后对空格字符进行标记,读入第一个标记(或 N)。在弄清楚 N 是什么之后,您可以阅读其余的预期标记。如何检查错误输入取决于您。
    • 好的,我想我明白了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多