gpt4 book ai didi

c++ - 为什么getline在3个换行符之后表现怪异?

转载 作者:行者123 更新时间:2023-12-02 09:47:55 25 4
gpt4 key购买 nike

我以说我在发布问题以及一般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的指针。然后,您稍后尝试读取无效的指针。
附言在循环的每次迭代中使用std::strlen计算字符串的长度不是一个好主意。通过使用userInput.size()可以不进行计算就获得大小。
要解决这两个问题,只需不使用inputArray即可。您不需要它:

for (int i = 0; i < userInput.size(); i++){
if ((userInput[i] == ' ') || (userInput[i] == '\n')){
...

关于c++ - 为什么getline在3个换行符之后表现怪异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63514830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com