2010-10-14 137 views
0

我有一個問題,但我無法弄清楚我做錯了什麼。我不確定這是否是我的循環出現問題,或者cin緩衝區未被清除。我正在做一個將C風格的字符串轉換爲大寫字母的程序,但是如果用戶輸入的字符數超過了11個,那麼該函數應該只顯示前11個字符,之後的任何內容都不應該顯示。問題是,如果我輸入超過11個字符,然後我的循環從不停止,並不斷告訴用戶輸入的答案無效,並且他是否要輸入新的字符串。環路問題。 Cin C++ getline清除緩衝區

回答

0

問題出在您嘗試清除緩衝區時。當你從cStringToUpper返回時,你的緩衝區中還有額外的字符,但是你馬上尋找y/q。

0

你給cin.getline一個緩衝區12長,所以它只會佔用很多字符,其餘的仍然在緩衝區中。如果你改用

string str; 
cin.getline(str) 

然後你會得到整條線,然後你可以裁剪11個字符。不是100%的cin-syntax,但你明白了。

或移動忽略部分上述

cin >>cont; 

忽略多餘的字符的方式。

0
cin >> cont; 
cout << "\n" << endl; 
cin.ignore(200,'\n'); 

應該

cin.ignore(200,'\n'); 
cin >> cont; 
cout << "\n" << endl; 
0

您可以通過修改cStringToUpper FN糾正你的計劃。例如:

...  
int loopCount; 
char buffer[256]; 
cin.getline(buffer,256); 
strncpy(letters, buffer, 11); 
//letters[11]= '\0'; 
cout << "\n" << endl; 
...