【问题标题】:How can I make std::cin read spaces? [duplicate]如何使 std::cin 读取空间? [复制]
【发布时间】:2016-12-03 20:54:06
【问题描述】:

我知道这个问题之前在这个网站上被问过一点,但我似乎无法掌握如何让它与我的特定程序一起工作。

基本上,我正在创建一个小 MadLibs 类型的游戏,玩家必须在其中输入某些内容才能使其融入故事。现在,如果用户输入中没有空格,这将非常有效,但是第二次有人输入空格,程序可以跳过整个问题。

这是我的代码:

int main(){

    int selection;

    //News Report Variables
    std::string nrfullname;
    std::string nrcrime;
    std::string nradjective;
    std::string nrtown;
    std::string nrpluralnoun;
    std::string nrnounnotplace;
    std::string nrverb;
    std::string nradjective2;
    std::string nrfullname2;
    std::string nrnounnotplace2;

    std::cout << "Welcome to Mad Libs! Please, pick a story!" << std::endl;
    std::cout << "1. News Report" << std::endl;
    std::cin >> selection;

    if (selection == 1) {
        std::cout << "We need a full name of someone." << std::endl;
        std::cin >> nrfullname;
        std::cout << "We need a crime." << std::endl;
        std::cin >> nrcrime;
        std::cout << "We need an adjective." << std::endl;
        std::cin >> nradjective;
        std::cout << "We need a town." << std::endl;
        std::cin >> nrtown;
        std::cout << "We need a plural noun." << std::endl;
        std::cin >> nrpluralnoun;
        std::cout << "We need a noun that is NOT a place." << std::endl;
        std::cin >> nrnounnotplace;
        std::cout << "We need a verb." << std::endl;
        std::cin >> nrverb;
        std::cout << "We need another adjective." << std::endl;
        std::cin >> nradjective2;
        std::cout << "We need a full name of someone else." << std::endl;
        std::cin >> nrfullname2;
        std::cout << "We need another noun that is NOT a place." << std::endl;
        std::cin >> nrnounnotplace2;
    }

正如您可能想象的那样,大多数人会选择在询问某人全名的位置放置一个空格(我当然知道我会这样做)。如果他们输入那个空格,它会跳过“犯罪”问题而直接转到形容词问题。

如果你能告诉我如何让它正常工作,那将是有益的,因为它让我有点压力,我尝试过的所有解决方案要么使问题变得更糟,要么什么也没做帮助修复它。

【问题讨论】:

  • 你只需要std::getline...
  • 请注意,std::cin 不会读取任何内容。它是一个提供控制台接口的对象。是您调用的函数读取字符和值。

标签: c++ whitespace cin spaces


【解决方案1】:

您只需使用std::getline(std::cin, nrfullname [, delim]),而不是std::cin &gt;&gt; nrfullname

std::getline() 从输入流中提取字符并将结果存储在nrfullname 中,直到下一个分隔符。如果不指定分隔符,则使用'\n'

【讨论】:

    【解决方案2】:

    在 std::getline 中使用并写入:cin.getline(x,sizeof(x))

    【讨论】:

      猜你喜欢
      • 2021-02-28
      • 2011-11-27
      • 2010-11-27
      • 2013-09-04
      • 2017-08-29
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多