首页 > 后端开发 > C++ > 为什么使用'cin”后'getline”不提示输入?

为什么使用'cin”后'getline”不提示输入?

Mary-Kate Olsen
发布: 2024-12-01 06:48:10
原创
666 人浏览过

Why Doesn't `getline` Prompt for Input After Using `cin`?

getline 不提示输入

在你的代码中,当你调用 getline(cin, mystr); 时,程序无法提示用户进行输入。这是因为您之前使用 cin >> 时姓名;和cin>> i;,用户在输入响应后输入的换行符保留在输入缓冲区中。

空格分隔

>>运算符以空格分隔。这意味着当用户输入数据后按 Enter 键时,换行符不会存储在变量中,而是保留在输入缓冲区中。

getline 的行为

getline 也是由空格分隔的。当您调用 getline 时,它​​会在输入缓冲区中搜索换行符。由于换行符已经存在于缓冲区中,getline 会立即找到它要查找的内容,并且不会提示用户输入。

解决方案

解决此问题,您可以使用以下方法之一:

  1. 调用忽略:之间使用>>和 getline,调用 cin.ignore() 从输入缓冲区中清除换行符。
  2. 仅使用 getline: 不要使用 >>,而是对所有用户输入使用 getline。使用 stringstream 将字符串输入转换为所需的数据类型。

改进的代码:

这是专门使用 getline 的代码的改进版本:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main() {
    string name;
    int age;
    float price;

    cout << "Hello World!" << endl;
    cout << "What is your name? ";
    getline(cin, name);
    cout << "Hello " << name << endl;
    cout << "How old are you? ";
    getline(cin, age);
    cout << "Wow " << age << endl;

    cout << "How much is that jacket? ";
    getline(cin, price);
    stringstream(price) >> price;
    cout << price << endl;
    system("pause");

    return 0;
}
登录后复制

以上是为什么使用'cin”后'getline”不提示输入?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板