请问哪里有问题输入aba输出不了true

img

原因:
“==”比较的是值是否相等,数组的数组名是首元素在内存中的地址值,所以用“数组名==数组名”是比较地址值,而你定义了两个字符数组,在内存中开辟了两个地址不一样的空间,所以用“==”比较两个字符数组名肯定是不相等的。
解决办法:
用C库提供的字符串比较函数。
例如:

// 你代码中的if语句改为
if(strcmp(a, c) == 0) { printf("true"); }

字符串比较函数
int strcmp(const char *str1, const char *str2)

参数

  • str1 -- 要进行比较的第一个字符串。
  • str2 -- 要进行比较的第二个字符串。

返回值

  • 如果返回值小于 0,则表示 str1 小于 str2。
  • 如果返回值大于 0,则表示 str1 大于 str2。
  • 如果返回值等于 0,则表示 str1 等于 str2。
#include <stdio.h>
#include <string.h>

int main()
{
    char c[30];
    char a[30];
    int i,m,n;
    gets(c);
    n=strlen(c)-1;
    m=n;
    for(i=0;i<=m;i++){
        a[i] = c[n];
        n--;
    }
    if(a==c)  //这个语句是判断地址是否相等,如果要判断值,请用if(strcmp(a,c) == 0)
    {
        printf("true");
    }else{
        printf("false");
    }
    return 0;
}

看我代码写的注释


 for (i = 0; i <= m; i++)
    {
        a[i] = c[n];
        if (a[i] == c[n])
        {
            n--;
        }
    }
    if (strcmp(a, c) == 0)
    {
        printf("true");
    }

你的a字符串没有赋值,并且a与c两个字符串的比较应该用strcmp函数
strcmp() 用来比较字符串(区分大小写),其原型为:
int strcmp(const char *s1, const char *s2);

img


这是改进后的代码。
1.strlen是计算字符串长度的函数,你编写时减1,我才是把’\0’也算进去了,不需要的。
2.在给数组赋初值是数组下标是从0开始的,赋值是要注意。
3.比较两个数组相等要用strcmp函数,strcmp(c,a),为0时相等,为正数则c大于a,为负数则反之