下面是代码,当我运行它时,语句显示循环不能跳转到else函数,我不确定代码的哪一部分是错误的。
bool isPalindrome(char A[], int n) {
int flag = 1;
int i;
for (i = 0; i <= strlen(A); i++) {
if (A[i] != A[strlen(A) - i - 1]) {
flag = 0;
break;
} else {
flag = 1;
}
return flag;
}
int main(void) {
char A[] = {};
bool result;
printf("Enter a word:");
scanf("%c", A);
result = isPalindrome(A, strlen(A));
if (result == true) {
printf("yes");
} else {
printf("no");
}
return 0;
}
我希望有人能帮我解决这个问题。
2条答案
按热度按时间vxbzzdmp1#
程序无法编译,因为
isPalindrome
函数中return flag;
语句之前缺少}
。此外,在每次成功测试后,无需在循环中将
flag
设置为1
。还要注意的是,由于您提供了字符串长度作为参数,因此不需要多次计算
strlen(A)
。以下是一个简化版本:
上面的函数对每个字符测试两次。你可以这样进一步简化它:
main函数也不正确:
char A[100]
.%s
而不是%c
来读取该字,或者使用更好的%99s
来防止潜在的缓冲区溢出。以下是修改后的版本:
cwtwac6a2#
本声明
在C中无效。不能使用空的花括号列表作为初始值设定项。
在程序中,应显式指定字符数组的大小,例如
当你试图检查一个字符串是否是回文时,在函数声明中使用第二个参数是没有意义的,甚至当它没有被使用时
函数应声明为
并称之为
在函数中,for循环的条件
是错的。
此外,多次调用函数
strlen
也是低效的。该函数可以如下所示