cin缺少第一行词

时间:2016-08-13 01:25:10

标签: c++ cin getline

我在涉及cin的程序中遇到了问题。

我的问题是我输入的所有内容的第一个单词似乎被跳过,可能是因为缓冲区的处理方式。我已经看到类似的相关帖子,但试图将他们的修复程序应用到我的代码到目前为止失败了。应该发生的是用户输入名称,该名称存储在包含其他输入数据的文本文件中。但是,它总是丢掉第一个字。

#include "string"
#include "stdafx.h"

string _name;    

int main()
{
    cout << "Choose a name" << endl;

    getline(cin, _name);
    cout << _name;

    ofstream dat;
    dat.open("data.txt");
    dat << _name;
    dat.close();
        return 0;
    }

此代码出现问题所在。我只是无法接受第一个字。

2 个答案:

答案 0 :(得分:0)

cin >> _name;

这会将第一行输入的第一个单词读入_name

getline(cin, _name);

这会将该行的其余部分读入_name。这会覆盖名称的现有内容。

因为这会覆盖包含第一个单词read的_name的现有内容,所以除了行的第一个单词之外,最终会读取所有内容,如上所述。

如果您只想将整行写入_name,则唯一需要做的就是删除cin >> _name

答案 1 :(得分:0)

如果你想从cin中读取一个名字,那么你的代码应该是这样的:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string _name;
    cout << "Choose a name : ";

    getline(cin, _name);
    cout << _name << endl;

    // Do something with _name - write to file etc..
    // ..
}