getline函数不会退出循环

时间:2019-03-28 01:19:35

标签: c++ getline c-strings istream

基本上,我正在创建自己的名为MyString的字符串类。在该类中,有一个名为getline的函数,该函数的执行应与'string'类的getline函数完全相同。

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

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;
}

此后,我已经解决了我的最后一个问题,但是现在我的主电话仅在我最后一次拨打热线电话后关闭。

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 个答案:

答案 0 :(得分:0)

这是一个逻辑错误:

Matrix<T>

如果is.peek() != '\0' || is.peek() != delim =='\ 0'is.peek() delim , then it won't equal is.peek()(unless is also '\0') if,则它将不等于== delim(再次,除非也是'\ 0')

您正在寻找:

'\0'

如果is.peek() != '\0' && is.peek() != delim 等于is.peek()'\0'

,则终止循环
相关问题