我试图检查字符串是否是C语言中的回文(向后或向前读取相同内容) #包括 #包括 void main() { char-pal[50]; int回文=1,i=0; fgets(pal,50,stdin); while(回文&&i
这就是我正在使用的代码,它是有效的(至少我认为我只尝试了两个示例)。现在的问题是,我的教授写的有点不同,在课堂上对他们有效,但在家里对我无效。不同之处在于,他们编写了第一条If语句,如下所示我试图检查字符串是否是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(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);
}