2014-10-17 82 views
0

這是一個非常簡單的問題,一直困擾我很多。在while循環中從一行中讀取字符時,它不會再次讀取。如果我使用cin>>name它工作正常,但我需要字符之間的空格。同樣的問題使用String類。無法讀取循環中的字符/字符串

int main() 
{ 
    int i=0; 
    int intRate; 
    char name[20]; 
    while(i!=3){ 
     cout<<"Enter name"; 
     gets(name); 

     cout<<"Enter Interest Rate: "; 
     cin>>intRate; 

     i++; 
     cout<<endl; 
    } 
    cout<<"name is : "<<name<<endl; 
    cout<<"Interest Rate is: " <<intRate; 
} 

所以,當我嘗試鍵入字符「得到(名稱)」的循環中,第一次接受字符,然後我也可以進入intRate,但下一次,當我遇到循環i=1我無法爲name鍵入任何內容,或者它不會讀取任何字符行,而是會打印Enter Interest Rate,並在以下循環中讀取intRate

但是,如果我不把進入利率線然後開始讀書再次平穩,象下面這樣:

char name[20]; 
while(i!=3){ 
    cout<<"Enter name"; 
    i++; 
    cout<<endl; 

如果我這樣做,它會讀取來自循環中的所有字符。如果我在其下面添加另一條打印線,它就不會讀取任何內容。

+1

鴕鳥政策做奇怪的事情,並使用函數getline(並得到非常非常糟糕,因爲你不容防止用戶破您的程序) – deviantfan 2014-10-17 02:18:24

+0

您不能混用cstdio和iostream函數,因爲兩者都使用單獨的緩衝區。 – kay 2014-10-17 02:22:18

回答

1

這就是當你混合使用C和C++輸入並且不注意他們實際在做什麼時會發生什麼。

試試這個:

int main() 
{ 
    int i = 0; 
    int intRate = 0; 
    string name; 
    while (i != 3) 
    { 
     cout << "Enter name: "; 
     getline(cin, name); 

     cout << "Enter Interest Rate: "; 
     cin >> intRate; 
     cin.clear(); 
     cin.ignore(numeric_limits<streamsize>::max(), '\n'); 

     i++; 
     cout << endl; 
    } 

    cout << "Name is : " << name << endl; 
    cout << "Interest Rate is: " << intRate; 

    return 0; 
} 

或者這樣:

int main() 
{ 
    int i = 0; 
    int intRate = 0; 
    string name, line; 
    while (i != 3) 
    { 
     cout << "Enter name: "; 
     getline(cin, name); 

     cout << "Enter Interest Rate: "; 
     getline(cin, line); 

     stringstream ss(line); 
     ss >> intRate; 

     i++; 
     cout << endl; 
    } 

    cout << "Name is : " << name << endl; 
    cout << "Interest Rate is: " << intRate; 

    return 0; 
}