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

C++ 为什么键入三个非整数会导致此函数无限递归?,c++,function,recursion,C++,Function,Recursion,我设置了一个脚本,要求用户输入一个最多两位数的数字 但如果用户在中键入三个非整数,如“fff”,则递归函数prompgetage()将无限激发 为什么? int prompgetage(){ char-myString[3]; 不能使用中的strcmp()函数来比较字符串的内容,而不是=(它只比较第一个字符的地址)。也就是说,不要使用myString==“0\0”而使用strcmp(myString,“0”)==0 或者,最好使用字符串在中键入。然后可以使用==进行比较 请注意,字符串文字无论如

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

但如果用户在中键入三个非整数,如“fff”,则递归函数
prompgetage()
将无限激发

为什么?

int prompgetage(){
char-myString[3];
不能使用
中的
strcmp()
函数来比较字符串的内容,而不是
=
(它只比较第一个字符的地址)。也就是说,不要使用
myString==“0\0”
而使用
strcmp(myString,“0”)==0

或者,最好使用
字符串
中键入。然后可以使用
==
进行比较

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

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

使用
中的
strcmp()
函数比较字符串的内容,而不是
=
(它只比较第一个字符的地址)。也就是说,不要使用
myString==“0\0”
使用
strcmp(myString,“0”)==0

或者,最好使用
字符串
中键入。然后可以使用
==
进行比较

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


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

一旦cin处于错误状态,就必须清除它。将3个字符读入2个字符缓冲区的未定义行为?@JSF I刚刚将
char-myString[2];
更改为
char-myString[3]
不起作用始终测试io函数的结果,包括写入cout。
如果(!(cout)cin处于错误状态,则必须清除它。将3个字符读入2个字符缓冲区的未定义行为?@JSF I刚刚更改了
char-myString[2];
char-myString[3];
不起作用始终测试io函数的结果,包括写入cout。
如果(!(cout
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;
}