2016-08-13 90 views
-2

我一直在涉及cin的程序中出现问题。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; 
    } 

该代码是问题似乎是。我无法接受第一句话。

+1

请发表你有一个问题,真正的代码,而不是虚构的,赢得幻想代码”甚至编译。 –

+0

不用担心,如果事实上这已被回答,它会被标记为与正确的重复问答链接 – davedwards

+0

好的谢谢你。 – cooperg2001

回答

0
cin >> _name; 

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

getline(cin, _name); 

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

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

如果您只想将整行读入_name,则唯一需要执行的操作是删除cin >> _name

+0

我试过删除cin >> _name这样做导致没有输入。 – cooperg2001

+0

适合我。定义“什么都不要输入”。 –

+0

我的意思是没有任何我输入的内容被读入_name,但我只是修复了这个问题,它只是像第一个字一样丢掉第一个字 – cooperg2001

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.. 
    // .. 
} 
+0

我认为你一个接一个地使用cin和getline()会出问题。 cin >>在iostream中保留换行符,如果在cin >>之后使用getline,多余的换行符会导致第一个单词被忽略。尝试在cin之后和真正的getline()之前添加一个虚拟getline()。 – kgvinod

+0

我会尝试,但它的奇怪我做了你的代码复制粘贴,看看它是否会工作,但它做了,但把它与我的程序的其余部分,程序只是跳过getline并返回0. – cooperg2001

+0

cin/getline()问题也在这里讨论:http://stackoverflow.com/questions/5739937/using-getlinecin-s-after-cin?rq = 1 – kgvinod