C语言哪里错了?帮我改改吧

#include
#include

char s[100];
int panduan()
{
int n=strlen(s);
int i;
for(i=0;i<n/2;i++)
{
if (s[i]!=s[n-i])
return 0;
}
return 1;
}
void main()
{
scanf("%s",&s);
if (panduan())
printf("yes");
else
printf("no");
}

 #include <stdio.h>
#include <string.h>

char s[100];
int panduan()
{
    int n=strlen(s);
    int i;
    for(i=0;i<n/2;i++)
    {
        if (s[i]!=s[n-i-1]) //修改
            return 0;
    }
    return 1;
}
void main()
{
scanf("%s",&s);
if (panduan())
printf("yes");
else
printf("no");
}

s 为数组 取数组地址相当于数组指针,二scanf的第二个参数需要的是指针,数组名字就是首地址,所以scanf改成sanf(“%s”,s);就可以了。

s 为数组 取数组地址相当于数组指针,二scanf的第二个参数需要的是指针,数组名字就是首地址,所以scanf改成sanf(“%s”,s);就可以了。

对数组名取地址,其实还是数组名!这个没有错的。

if (s[i]!=s[n-i]) 当 i 等于 零 时,对于数组来说已经越界了。所以,需要注意!

综合楼上两位即可:

 #include <stdio.h>
#include <string.h>
char s[100];
int panduan()
{
    int n=strlen(s);
    int i;
    for(i=0;i<n/2;i++)
    {
        if (s[i]!=s[n-i-1])//修改
            return 0;
    }
    return 1;
}
void main()
{
    scanf("%s",s);//修改
    if (panduan())
        printf("yes");
    else
        printf("no");
}

scanf("%s",&s); 改为 scanf("%s",s);