【问题标题】:How does one process a user input with cin that contains whitespace?如何使用包含空格的 cin 处理用户输入?
【发布时间】:2020-05-26 00:29:58
【问题描述】:

我刚开始学习 C++,在我的程序中遇到了一个小错误:

#include <iostream>
using namespace std;

int main()  {
    string name;
    int number;
    cout << "Hello!\n";
    cout << "Please enter your name: " << flush;
    cin >> name;
    cout << "Please enter a whole number: " << flush;
    cin >> number;
    cout << "Thank you for your cooperation, " + name + ". We will be contacting you again soon in regards to your order of " << number << " puppies.\n";
}

当尝试输入多个单词(例如,No One)时,它第一次要求用户输入时,程序将输出以下内容:

请输入一个整数:谢谢您的合作,不,我们会尽快就您订购的 0 只小狗再次与您联系。

我在其他地方读到cin 对所有空格都一视同仁(因此空格将被视为与返回相同),我该如何避免这个问题?

【问题讨论】:

  • 你可以看看std::getline。默认情况下,一次读取输入一行。
  • "我在别处读到cin 对所有空格都一视同仁" - 不是cin 以这种方式处理空格,而是operator&gt;&gt; 特别是是,因为它旨在读取 空格分隔 标记。因此,在您的示例中,使用std::getline() 将多字输入读入name,然后&gt;&gt; 可以读取number

标签: c++ whitespace cin


【解决方案1】:

尝试使用 getline http://www.cplusplus.com/reference/string/string/getline/ 这有什么帮助吗?

#include <iostream>
#include <string>

int main() {
std::string name;
int number;
std::cout << "Hello!\n";
std::cout << "Please enter your name: " << std::flush;
getline(std::cin, name);
std::cout << "Please enter a whole number: " << std::flush;
std::cin >> number;
std::cout << "Thank you for your cooperation, " + name + ". We will be contacting 
you again soon in regards to your order of " << number << " puppies.\n";

return 0; 
}

【讨论】:

  • Getline 似乎绝对是要走的路!我试图弄清楚为什么 getline() 没有注册为函数,但注意到添加了 #include 并修复了这个 lil 问题。该程序现在实际上也可以正常工作了!我会问:为什么要把return 0;放在程序末尾?
  • 嘿,很高兴我能帮上忙。我们返回 0 是因为 main() 函数期望返回一个 int。你可以忽略它,编译器会为你把它放进去。作为约定,选择 0 是因为它告诉调用者程序成功运行,如果出现问题,您可能会看到程序以不同的值退出,这对调试很有用。我自己几乎是一个初学者,所以这里有些人说得更清楚stackoverflow.com/questions/14928520/…
猜你喜欢
  • 1970-01-01
  • 2014-09-01
  • 2013-10-04
  • 2018-01-13
  • 2011-08-26
  • 1970-01-01
  • 2021-02-26
相关资源
最近更新 更多