我已经设置了一个脚本,要求用户输入最多两位数的数字。
但是如果用户输入了三个非整数,例如&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;
}
答案 0 :(得分:2)
使用strcmp()
中的<cstring>
函数来比较字符串的内容,而不是==
(仅比较第一个字符的地址)。即代替myString == "0\0"
使用strcmp(myString, "0") == 0
。
或者,更好的是,使用string
中的<string>
类型。然后,您可以使用==
进行比较。
请注意,字符串文字无论如何都会附加'\0'
个字符,strcmp()
会搜索找到的第一个字符。因此strcmp(myString, "0")
和strcmp(myString, "0\0")
并且不要使用递归来返回并重复操作。使用循环。