我试图检查字符串是否是C语言中的回文(向后或向前读取相同内容) #包括 #包括 void main() { char-pal[50]; int回文=1,i=0; fgets(pal,50,stdin); while(回文&&i

我试图检查字符串是否是C语言中的回文(向后或向前读取相同内容) #包括 #包括 void main() { char-pal[50]; int回文=1,i=0; fgets(pal,50,stdin); while(回文&&i,c,string,C,String,这就是我正在使用的代码,它是有效的(至少我认为我只尝试了两个示例)。现在的问题是,我的教授写的有点不同,在课堂上对他们有效,但在家里对我无效。不同之处在于,他们编写了第一条If语句,如下所示If(pal[i]!=pal[strlen(pal)-i-1])。 这对我在家里不起作用,它给出了错误的结果(他们在anavolimilovana类中给出的示例(请记住,这是塞尔维亚语的,所以是),它给出的输出是一个回文,实际上是。但对我来说,它给出的输出是printf(“%s不是回文”,pal)我不知道为什

这就是我正在使用的代码,它是有效的(至少我认为我只尝试了两个示例)。现在的问题是,我的教授写的有点不同,在课堂上对他们有效,但在家里对我无效。不同之处在于,他们编写了第一条If语句,如下所示
If(pal[i]!=pal[strlen(pal)-i-1])
。 这对我在家里不起作用,它给出了错误的结果(他们在anavolimilovana类中给出的示例(请记住,这是塞尔维亚语的,所以是),它给出的输出是一个回文,实际上是。但对我来说,它给出的输出是
printf(“%s不是回文”,pal)我不知道为什么,但最终我把if语句改为
-2
,而不是
-1
。 我猜这与字符串末尾的
\n
有关,但我不确定自己对编程是否比较陌生。
另外,我使用的是
fgets
而不是
gets
,因为
gets
对我不起作用,它会抛出错误代码
标识符“gets”未定义的
,所以我在谷歌上搜索,它说用了
fgets
。在课堂上,他们用
gets
代替
fgets
忘了提到它可能有相关性。

gets()
自动删除输入末尾的换行符,
fgets()
没有。因此,您的代码只是再减去1以忽略换行符。您的教授需要跟上时代--
get()
是一个危险的函数,因为它没有指定缓冲区大小限制。因此,它已从语言中删除。
void main()
你的教授应该从1999年开始教你
intmain(void)
#include <stdio.h>
#include <string.h>
void main()
{
    char pal[50];
    int palindrome = 1, i = 0;
    fgets(pal,50,stdin);
    while (palindrome && i < strlen(pal) / 2)
    {
        if (pal[i] != pal[strlen(pal) - i - 2])
            palindrome = 0;
        else
            i++;
    }
    if (palindrome)
        printf("%s is a palindrome", pal);
    else
        printf("%s is not a palindrome", pal);
}