判断字符串是否为回文,为什么输出结果是错的?代码的逻辑哪里错了?

#include
#include
#include
#define M 10
/* run this program using the console pauser or add your own getch, system("pause") or input loop /
/*238-6.编写判断字符串是否为回文的函数,并按书中要求输出对应结果。
/
void plalindrome(char s)
{
int a,i=0,n;
n=strlen(s)-1;
for(i=0;i<n;i++)
{
if(*s!=
(s+n-1-i))
{
a=0;
break;
}
}
if(a==0)
{
printf("NO");
}
else
{
printf("YES");
}
}
int main(int argc, char *argv[])
{
char str[M],*s,i=0;
while((str[i++]=getchar())!='\n');
s=str;
plalindrome(s);
return 0;
}
图片说明


看到几个代码中的bug:

void plalindrome(char s)
void plalindrome(char *s)

n=strlen(s)-1;
n=strlen(s);

for(i=0;i<n;i++)
for(i=0;i<n/2;i++)

if(*s!=(s+n-1-i))
if(s[i] != s[n-1-i])

while输入之后,要补充一个
str[i] = '\0';

你代码有几个不对的地方

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 10
/* run this program using the console pauser or add your own getch, system("pause") or input loop /
/*238-6.编写判断字符串是否为回文的函数,并按书中要求输出对应结果。*/
void plalindrome(char *s)
{
    int a=1,i=0,n;
    n=strlen(s)-1;
    for(i=0;i<n/2;i++)
    {
        if(*(s+i)!= *(s+n-1-i))
        {
            a=0;
            break;
        }
    }
    if(a==0)
    {
        printf("NO");
    }
    else
    {
        printf("YES");
    }
}
int main(int argc, char *argv[])
{
    char str[M],*s,i=0;
    memset(str,0x0,M);
    while((str[i++]=getchar())!='\n');
    s=str;
    plalindrome(s);
    return 0;
}