2011-11-23 71 views
4

我從C++中的一個函數調用函數,該函數的行號爲getline(cin,name),其中name是一個字符串。第一次通過循環,程序不會等待輸入。它將在所有其他循環中通過。任何想法爲什麼?getline(cin.name)被跳過

void getName (string& name) 
{ 
    int nameLen; 
     do{ 
      cout << "Enter the last Name of the resident." << endl << endl 
       << "There should not be any spaces and no more than 15" 
       << " characters in the name." << endl; 



     getline(cin,name); 
      cout << endl; 
      nameLen = name.length();// set len to number of characters input 

     cout << "last" << name << endl; 
     } 
     while (nameLen < LastNameLength); 
     return; 
} 
+0

在調用函數之前,可能還有一些數據仍在等待從stdin中讀取。 –

+0

請提供一個*小而完整的*程序來證明這個問題。你所描述的問題可能是由於你沒有向我們展示的代碼造成的。 –

+1

題外話:當你的意思是'\ n''時,請不要使用'endl'。 'endl'刷新不必要的低效率輸出流。 –

回答

6

確保沒有因爲你讀的東西CIN,就像上次一樣,左側額:在你的程序
在較早的時間點:

int number; 
cin >> number; 

你給的輸入:

5 

在以後的程序:

getline(cin,name); 

getline似乎不會被調用,而是從上次輸入時收集換行符,因爲當您使用cin >>時,它會留下新行。

+0

感謝您的建議。我在getline之前添加了一行cin.ignore('\ n')。前面的函數中有cin語句。這糾正了這個問題 – user1060993

2

這可能是因爲輸入流。 getline函數在接收到第一個換行符後停止讀取輸入。例如,如果std :: cin的緩衝區中有多個換行符 - getline將在每次遇到時返回。

檢查您所期望的輸入。

2

您有任何問題: cin < < variableName;

行代碼?我跑進函數getline()跳過運行時間錯誤,當我用:

CIN < <了IntVariable隨後函數getline(CIN,變量)

這是因爲cin流對象包含輸入緩衝區。當你輸入換行符時,我認爲它是從流到變量asisgnment的流中trunacated的,但仍然包含在cin對象實例本身中。

我使用的一種解決方法是cin.ignore();之後cin < <整數聲明。

另一位用戶提到將getline中的所有輸入解析爲整數,float(而非root beer)和字符串。祝你好運,並檢查你的代碼的雙因子& getline()。