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