2014-12-07 51 views
0

我剛剛遇到了這個小問題,當我輸入「Student No.1」的詳細信息時,以及第二個輸入時,它跳過了名稱。任何幫助? 這裏是到目前爲止我的代碼:在C++中使用getLine()的錯誤

#include<stdlib.h> 
#include<iostream> 
#include <string> 
using namespace std; 

int main(){ 

    int age[3]; 
    double gpa[3]; 
    string name[3], level[3]; 

    cout<<"< < < < < Enter 3 Student Data > > > > >"<<endl; 
    for (int x=0; x<3; x++){ 
    cout<<"-------------------------------"<<endl; 
    cout<<"Student No."<<x+1<<endl; 
    cout<<"Enter name: "; 
    getline(cin, name[x]); 
    cout<<"Enter your age: "; 
    cin>>age[x]; 
    cout<<"Enter your GPA: "; 
    cin>> gpa[x]; 
    do{ 
    cout<<"Enter you grade level [freshman, sophomore, junior, or senior]: "; 
    cin>>level[x]; 
    }while(level[x] != "freshman" && level[x] != "sophomore" && level[x] != "junior" && level[x] != "senior"); 
    cout<<"-------------------------------"<<endl; 
    } 

    system("pause"); 
    cout<<endl<<endl<<"< < < < < Enter 3 Student Datas > > > > >"<<endl; 
    for (int x=0; x<3; x++){ 
    cout<<"-------------------------------"<<endl; 
    cout<<"Name: "<<name[x]<<endl<<"Age: "<<age[x]<<endl<<"GPA: "<<gpa[x]<<endl<<"Level: "<<level[x]; 
    cout<<endl<<"-------------------------------"<<endl; 
    //system ("pause"); 
    } 
    return 0; 

} 

回答

0

如果混合使用,你必須記住,CIN通常留下\ n字符在鍵盤緩衝區CIN和函數getline使用。 getline檢查緩衝區時,首先看到\ n字符並立即結束。使用getline函數前的cin.ignore刪除\ n字符。

+0

我試圖做到這一點,但是當涉及到打印時,它會跳過第一個記錄的名稱的第一個字母。假設我把國王Garrett放在名字上,那麼它只會顯示「ing Garrett」 – Kakarot 2014-12-07 13:38:01

+0

調用'cin.ignore(1,'\ n');'作爲第一個for循環內的最後一個命令,一切都應該正常工作。 – 2014-12-07 14:53:03

+0

它仍然是同一個人。我把cin.ignore();在getline()之前,然後我把cin.ignore(1,'\ n');在第一個for循環的最後部分,但它仍然相同 – Kakarot 2014-12-07 15:01:02