如何解决为什么getline在3个换行符之后表现怪异?
我将首先说我对发布问题以及C ++相对陌生,我的头衔有些la脚,因为它并没有真正专门解决我要处理的问题,但是我不能并没有真正想出另一种措词方式,因此,对改进标题的任何建议都表示赞赏。
我正在开发一个相对简单的函数,该函数应该使用getline获取字符串,并读取字符串中的空格和/或换行符,以便它可以输出已输入的单词数。到达字符“ q”后,基本上应该停止读取字符。
void ReadStdIn2() {
std::string userInput;
const char *inputArray = userInput.c_str();
int count = 0;
getline(std::cin,userInput,'q');
for (int i = 0; i < strlen(inputArray); i++){
if ((inputArray[i] == ' ') || (inputArray[i] == '\n')){
count += 1;
}
}
std::cout << count << std::endl;
}
我希望能够输入多个单词,然后输入换行符,并使该功能准确显示我的单词数。我不知道为什么,但是由于某些原因,输入3个换行符后,我的计数又回到了0。
例如,如果我输入:
hello
jim
tim
q
该函数工作正常,并返回3,正如我期望的那样。但是如果我输入
hello
jim
tim
bill
q
计数正确地变为0。我假设这与我的if语句有关,但是我真的错在哪里了,特别是因为它可以工作到第3个换行符。感谢您的帮助
解决方法
该程序的行为是不确定的。将输入读取到std::string
中可能会导致其容量增加。这将导致字符串中的指针变为无效。指针,例如inputArray
。然后,您稍后尝试读取无效的指针。
P.S。在循环的每次迭代中使用std::strlen
计算字符串的长度不是一个好主意。通过使用userInput.size()
可以不进行计算就获得尺寸。
要解决这两个问题,只需不使用inputArray
。您不需要它:
for (int i = 0; i < userInput.size(); i++){
if ((userInput[i] == ' ') || (userInput[i] == '\n')){
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。