循环问题。 Cin C ++ getline clear buffer

时间:2010-10-14 01:20:17

标签: c++ loops cstring cin getline

我遇到了问题,但我无法弄清楚我做错了什么。我不确定我的循环是否有问题,或者没有清理cin缓冲区。我正在做一个将C风格的字符串转换为大写的程序,但是如果用户输入超过11个字符,那么该函数应该只显示前11个,之后的任何内容都不应该显示。问题是如果我输入超过11个字符,然后我的循环永不停止,并不断告诉用户输入的答案无效,如果他想输入新的字符串。

4 个答案:

答案 0 :(得分:0)

问题来自于您尝试清除缓冲区的时间。当你从cStringToUpper返回时,你的缓冲区中仍然有额外的字符,但你会立即寻找y / q。

答案 1 :(得分:0)

你给cin.getline一个12长的缓冲区,所以它只会占用那么多的字符,其余的仍然在缓冲区中。如果您改为使用

 string str;
 cin.getline(str)

然后你将得到整行,然后你可以裁剪11个字符。不是100%的cin语法,但你明白了。

或移动上面的忽略部分

cin >>cont;

忽略那些额外的字符。

答案 2 :(得分:0)

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

应该是

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

答案 3 :(得分:0)

您可以通过修改cStringToUpper fn来更正您的程序。类似的东西:

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