C输出格式问题

时间:2012-10-22 12:55:03

标签: c formatting output

我在C中输出格式有问题。 请参阅下面的图片了解我的输出

See image

我希望我的输出如下

输入字词:KayaK

皮划艇是一个回文。

    // palindrome.c
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    #define MAXLEN 20

    int isPalindrome(char [], int);

    int main(void) {
    char word[MAXLEN+1];
    int size;

    printf("Enter word: ");
    fgets(word,MAXLEN+1,stdin);
    size = strlen(word);
    if (isPalindrome(word, size-1)) //size - 1 because strlen includes \0
   {
    printf("%s is a palindrome.\n",word);
   }
   else
   {
    printf("%s is not a palindrome.\n",word);
   }
   return 0;
   }

 int isPalindrome(char str[], int size) {
int i;
for (i = 0; i < size; i++)
{
    if (tolower(str[i]) != tolower(str[size - i - 1]))
    {
        return 0;
    }
}
return 1;
}

3 个答案:

答案 0 :(得分:8)

fgets读取字符串,包括终止换行符。只需在进一步处理之前将其剥离。

请注意,在传递size-1时,实际上考虑到了这一点,但出于错误的原因。它包括\n,而不是\0

答案 1 :(得分:1)

您的代码会掩盖包含行尾标记的原始字符串的问题:

此行剔除尾随零

if (isPalindrome(word, size-1)) //size - 1 because strlen includes \0

注释错误,顺便说一句:strlen不包含\0,其中包含\n

此行忽略尾随\n,因为size - i - 1再次减去1,即使您在第一次调用该函数时已将其减去:

if (tolower(str[i]) != tolower(str[size - i - 1]))

你应该这样做:

size--;
word[size] = '\0';
if (isPalindrome(word, size-1)) //size - 1 because strlen includes \0

现在您可以按照以下方式更正您的回文检查器:

if (tolower(str[i]) != tolower(str[size - i])) // No "minus one"
{
    return 0;
}

答案 2 :(得分:0)

剥离它意味着将其从字符串中删除。

//...
printf("Enter word: ");
fgets(word,MAXLEN+1,stdin);
size = strlen(word);
word[size-1] = '\0'
//program