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

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

最佳答案

使用 strcmp()<cstring> 中发挥作用比较字符串的内容,而不是 == (只比较第一个字符的地址)。即而不是 myString == "0\0"使用 strcmp(myString, "0") == 0 .

或者,更好的是,使用 string输入 <string> .然后你可以使用==进行比较。

请注意,字符串文字有一个 '\0'无论如何附加字符,和strcmp()搜索它找到的第一个。所以 strcmp(myString, "0") 之间没有功能差异和 strcmp(myString, "0\0")

并且不要使用递归返回并重复一个 Action 。使用循环。

关于c++ - 为什么键入三个非整数会导致此函数无限递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34778891/

相关文章:

python - 无法在else语句中重复执行功能,导致错误 'str'对象无法调用

r - 在 R-fisher 评分中实现递归函数的问题

c++ - 如何从 QDataStream 中读取数组

c++ - 必须输入两次值才能工作 C++

javascript - 函数内外的不同输出

algorithm - 用树和递归寻找时间复杂度

javascript - setTimeout() 函数运行无延迟

c++ - 打开 CV 断言失败错误

c++ - CreateThread 的保留和提交参数之间有什么区别?

Java 函数作为对象