【问题标题】:Asking the user to input a char and then a string要求用户输入一个字符,然后输入一个字符串
【发布时间】:2013-08-28 19:14:19
【问题描述】:

我正在编写一个简单的程序,要求用户输入一个字母。然后我要他输入一个短语。当它只是一个字符串时,我没有问题。

char c;
string s;
cin >> c;
cin >> s;

但是当我想要一个短语时

cin >> c;
getline(cin, s);

当我在用户输入一个字母并点击回车后运行程序时,我没有机会输入短语。当然,如果我键入字符并在空格后输入一个短语,程序就可以正常工作。

相反,当我输入一个字符,然后用第一种方法在空格后输入单个字符串时,它不会记录该字符串。

为什么要这样做?

【问题讨论】:

  • 使用cin.ignore()... 或者停止混合>>getline。使用两者之一,但不能同时使用。

标签: c++


【解决方案1】:

当你写一个字符并按下回车键时,实际上有 2 个字符被发送到缓冲区:字符本身和\n 作为回车键按下的结果。您的 cin >> c; 仅在 \n 仍保留在缓冲区中时读取第一个字符。由于std::getline() 在遇到\n 字符之前读取了所有内容,并且由于\n 是它遇到的第一个字符,因此它不会读取任何内容并且程序终止。在std::getline 之前添加一个std::cin.ignore();(忽略\n),代码就可以工作了。

【讨论】:

  • 对于仅使用 cin 而不是 getline() 的字符串输入的情况,这个概念有何不同?当我只使用 cin >> s;在 cin >> c 之后;它似乎工作得很好。
  • std::cin() 找到第一个非换行符和非空白字符并读取直到遇到一个。所以\n 被跳过了。
【解决方案2】:

由于 c 只接受一个字符,因此用户按下的回车键被赋予给 s,因此不会记录除此之外的任何内容。只按一个键,不输入字符。否则就使用字符串。

【讨论】:

    猜你喜欢
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多