NAME_绝 发表于 2018-9-2 20:15:28

关于c++里的getline()函数

为什么会直接跳过getline()函数的输入


#include<iostream>
#include<string>

struct Pisa
{
        std::string name;
        double diameter;
        double weight;
};

int main()
{
        using namespace std;

        Pisa * pisa = new Pisa;

        cout << "输入一个直径:";
        cin >> pisa->diameter;
        cout << "输入一个名称:";
        getline(cin, pisa->name);
        cout << "输入一个重量:";
        cin >> pisa->weight;

        cout << "名称:" << pisa->name << endl;
        cout << "直径:" << pisa->diameter << endl;
        cout << "重量:" << pisa->weight << endl;

        delete pisa;
        cin.get();
        cin.get();
        return 0;
}

nsyg123 发表于 2018-9-2 20:31:33

1.   Std::cin>> s 是无法读入换行和空格

2.   当前面的std::cin>>w;输入数字之后,数字存储在输入缓冲区,敲回车,输入的数字因为回车的原因传给了w,但是换行符仍然滞留在输入流了,如果在std::cin>>w 后面有着getline语句,这个换行符就被这个getline读取了,发现getline结果为空

3.   cin.getline()不会把’\0’, ‘ ‘, ‘\n’等默认的分隔符写入到字符数组,因此如果在std::cin>>w后面紧接着的cin.getline语句(可以尝试把ignore()语句注释掉),会变为空读入,再后面的cin.getline()就正常读入每一行内容,并且把读入的分隔符舍弃。

NAME_绝 发表于 2018-9-3 07:07:56

nsyg123 发表于 2018-9-2 20:31
1.   Std::cin>> s 是无法读入换行和空格

2.   当前面的std::cin>>w;输入数字之后,数字存储在输入 ...

多谢
页: [1]
查看完整版本: 关于c++里的getline()函数