当前位置: 首页 > 知识库问答 >
问题:

getline函数不退出循环[重复]

廉展鹏
2023-03-14

本质上,我正在创建自己的字符串类,名为MyString。在这个类中有一个名为getline的函数,它的执行应该和字符串类的getline函数完全一样。

但是经过测试,当函数到达空字符或指定的分隔符时,它似乎不会退出循环,而是不断提示输入,并将该输入添加到已经存在的字符串(c-string)中。

istream& getline (istream& is, MyString& stringC, char delim){
    int i = 0;
    do{
        is.get(stringC.stringM[i]);
        i++;
        if(i == stringC.Size){
            stringC.Grow(1);
        }
    }while(is.peek() != '\0' || is.peek() != delim);
    stringC.stringM[i] = '\0';
    return is;
}

我已经解决了我的上一个问题,但现在我的主服务器在我最后一次getline调用后关闭。

cin >> s1;
getline(cin,s2,',');
getline(cin,s3); 
//It ends here

cout << "\nNew string values:\n";

cout << "s1 = " << s1 << '\n';
cout << "s2 = " << s2 << '\n';
cout << "s3 = " << s3 << '\n';
cout << "---------------------------\n";

共有1个答案

严开宇
2023-03-14

这是一个逻辑错误:

is.peek() != '\0' || is.peek() != delim

如果is.peek()=='\0',那么它将不等于Delim(除非也是'\0')如果is.peek()==Delim,那么它将不等于>'\0'(再次,除非也是'\0')

您正在寻找:

is.peek() != '\0' && is.peek() != delim

如果为,则终止循环。peek()等于'\0'delim

 类似资料:
  • //在下面的程序中,在内部,当用户收到指令时,他可以简单地进入哨兵退出while循环,但是,当您得到希望购买的票的结果时,按999并不退出程序

  • 如果您能帮助我完成Java类的任务,我将不胜感激。问题提示如下: 编写一个程序来读取非负整数列表并显示最大整数、最小整数和所有整数的平均值。用户通过输入一个不用于查找最大值、最小值和平均值的负哨兵值来指示输入的结束。平均值应该是双精度类型的值,以便用小数部分计算。 我在代码中遇到的问题是,运行时,循环不会完成,除非输入的第一个值为负值,在这种情况下它返回: 输入的最大数字是:0输入的最小数字是:0

  • 这里的主要错误是do-while循环不会退出。该计划的前提是从一个行星跳到另一个行星,而planetName是目的地,current是您当前所在的行星。我想要的是当电流为“Io”时退出循环。每次“跳转”到另一个行星后,目的地即成为当前行星。我已经测试过了,当电流在 然而,循环仍在继续。

  • 所以我这里有一个程序,它只是简单地模仿跳棋(但不是跳,而是一个棋子简单地“吃掉”另一个棋子)。我有一个简单的类,它实现了一个“checkers”类对象,并创建了一个名为“chips”的int数组变量。还有一个“while”语句,它在chip[0]和chips[1]整数大于0时创建了一个循环。看起来是这样的: Checkers类中的count方法如下所示: 板是8 x 8(这就是board.leng

  • 问题内容: 在下面的代码中,我希望循环在+ + =时立即退出。但是,使用语句进行测试表明它一直持续到循环完成为止。我尝试过,然后在语句集中进行设置,但这会导致无限循环。我认为使用然后设置可能有效,但也可以一直运行到循环结束为止。什么是最优雅,最快的退出方式?谢谢。 问题答案: 该循环将只匹配条件时,当控制返回到它,即循环完全执行。因此,这就是即使满足条件也不会立即退出程序的原因。 但是,如果条件没