为什么键入三个非整数会导致此函数无限递归?

时间:2016-01-13 23:15:44

标签: c++ function recursion

我已经设置了一个脚本,要求用户输入最多两位数的数字。

但是如果用户输入了三个非整数,例如&fff',递归函数promptGetAge()将无限激发。

为什么?

int promptGetAge(){
    char myString[3];

    cout<<"How old is your dog? ";
    cin.getline(myString,3,'\n');
    int userStringToInt = atoi(myString);

    if(userStringToInt==0 && !(myString=="0\0")){
        promptGetAge();
    } else {
        return userStringToInt;
    }
}

int main(){
    cout<<"Your dog is "<<promptGetAge()<<" years old!"<<endl;
    return 0;
}

1 个答案:

答案 0 :(得分:2)

使用strcmp()中的<cstring>函数来比较字符串的内容,而不是==(仅比较第一个字符的地址)。即代替myString == "0\0"使用strcmp(myString, "0") == 0

或者,更好的是,使用string中的<string>类型。然后,您可以使用==进行比较。

请注意,字符串文字无论如何都会附加'\0'个字符,strcmp()会搜索找到的第一个字符。因此strcmp(myString, "0")strcmp(myString, "0\0")

之间没有功能差异

并且不要使用递归来返回并重复操作。使用循环。