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