我遇到了问题,但我无法弄清楚我做错了什么。我不确定这是否是我的循环有问题,或者 cin 缓冲区没有被清理。我正在做一个将 C 风格的字符串转换为大写的程序,但是如果用户输入超过 11 个字符,那么该函数应该只显示前 11 个字符,之后的任何内容都不应该显示。问题是,如果我输入超过 11 个字符,然后我的循环永远不会停止并不断告诉用户输入的答案无效以及他是否想输入新字符串。
问问题
3890 次
4 回答
0
cin >> cont;
cout << "\n" << endl;
cin.ignore(200,'\n');
应该
cin.ignore(200,'\n');
cin >> cont;
cout << "\n" << endl;
于 2010-10-14T01:35:34.113 回答
0
您可以通过修改 cStringToUpper fn 来更正您的程序。就像是:
...
int loopCount;
char buffer[256];
cin.getline(buffer,256);
strncpy(letters, buffer, 11);
//letters[11]= '\0';
cout << "\n" << endl;
...
于 2010-10-14T02:20:59.460 回答
0
当您尝试清除缓冲区时,问题就出现了。当您从 cStringToUpper 返回时,缓冲区中仍有多余的字符,但您会立即寻找 y/q。
于 2010-10-14T01:26:07.670 回答
0
你给 cin.getline 一个 12 长的缓冲区,所以它只需要那么多字符,其余的仍在缓冲区中。如果您改为使用
string str;
cin.getline(str)
然后你会得到整行,然后你可以将它裁剪为 11 个字符。不是 100% 使用 cin 语法,但你明白了。
或者移动上面的忽略部分
cin >>cont;
以这种方式忽略多余的字符。
于 2010-10-14T01:27:54.000 回答