2016-08-13 65 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