我设置了一个脚本,要求用户输入一个最多两位数的数字。
但是如果用户键入三个非整数,例如“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/