2010-10-14 136 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; 
...