我在涉及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;
}
此代码出现问题所在。我只是无法接受第一个字。
答案 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..
// ..
}