Когда i = 0
, f[n-i]
будет завершающим нулевым символом, который никогда не будет появляться в середине строки.
Из-за этого, если строка имеет длину 2 символа или более, условие f[i+1]==f[n-i]
будет ложным.
(Если строка имеет длину 1 символ, f[i+1]
будет завершающим нулевым символом после первого (и единственного) символа, поэтому условие будет выполнено.)
Условие должно быть f[i]==f[n-i-1]
.
Кстати,
- Вы не должны использовать
gets()
, который имеет неизбежный риск переполнения буфера, устарел в C99 и удален из C11.
- Вы должны использовать стандарт
int main(void)
в размещенной среде вместо void main()
, что недопустимо в C89 и определяется реализацией в C99 или более поздней версии, если только у вас нет особых причин использовать эту нестандартную подпись (например, вынужден использовать это от вашего босса или учителя).
Пример полного фиксированного кода:
#include<stdio.h>
#include<string.h>
int main(void)
{
int i,n,count=0;
char f[30 + 1]; /* allocate one more element for storeing newline character */
char* lf;
printf("Enter the string. : ");
fgets(f, sizeof(f), stdin); /* change gets() to fgets() */
/* fgets() stores newline character while gets() doesn't, so remove it */
if ((lf = strchr(f, '\n')) != NULL) *lf = '\0';
n = strlen(f);
for(i=0;i<n;i++)
{
if(f[i]==f[n-i-1])
count=count+1;
}
if(count==n)
printf("\n Entered string is Palindrome");
else
printf("\n Entered string is NOT Palindrome");
}