C输出错误[重复]

efzxgjgh  于 2023-03-17  发布在  其他
关注(0)|答案(3)|浏览(92)

此问题在此处已有答案

How do I properly compare strings in C?(10个答案)
十小时前关门了。
输出表达式不正确

代码:

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

int main() {
    char a[40],b[40];
    printf("character input: "); fgets(a, sizeof(a), stdin);
    strcpy(b, a);
    strrev(a);
    printf("%s\n", a);
    printf("%s", b);
    
    if (b == a) printf("palindrome");
    else printf("not palindrome");
}

字符输入:

seles

输出:

seles
seles
not palindrome
z9smfwbn

z9smfwbn1#

函数fgets可以将对应于按下的Enter键的新行字符'\n'附加到输入的字符串,前提是目标字符数组具有存储它的空间。
你得把它去掉比如说

a[ strcspn( a, "\n" ) ] = '\0';

在反转钻柱之前。
在此if语句中

if (b == a) printf("palindrome");

有两个指针指向字符串的第一个字符,而不是字符串本身。相反,您需要使用标准的C函数strcmp

if ( strcmp( b, a ) == 0 ) puts("palindrome");
else puts("not palindrome");
j2cgzkjk

j2cgzkjk2#

我想你可以这样使用:

if (strcmp(a, b) == 0) printf("Palindrome\n");
else printf("Not palindrome\n");
x33g5p2x

x33g5p2x3#

  1. strrev不是标准的c函数。它并非在所有编译器上都可用
    1.您必须遍历匹配单个字符的整个字符串,或者使用strcmp检查两个字符串是否相同。
    1.使用fgets,您还可以读取换行符。此换行符需要过滤掉a[strcspn(a, "\n")] = 0
    代码:
#include <stdio.h>
#include <string.h>

char *strrev(char *str)
{
      char *p1, *p2;

      if (! str || ! *str)
            return str;
      for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
      {
            *p1 ^= *p2;
            *p2 ^= *p1;
            *p1 ^= *p2;
      }
      return str;
}

int main() {
    char a[40],b[40];
    memset(a, 0, 40);
    memset(b, 0, 40);
    printf("character input: ");
    fgets(a, sizeof(a), stdin);
    a[strcspn(a, "\n")] = 0; //Remove newline from buffer
    strcpy(b, a);
    strrev(a);
    printf("%s\n", a);
    printf("%s\n", b);
    for(int i = 0; i < strlen(a); i++)
    {
        if (b[i] != a[i]) 
        {
            printf("not palindrome");
            return 0;
        }
    }
    printf("palindrome");
}

相关问题