只有某些回文被写入文件

Only certain palindromes get written to file

我正在从事一个项目,该项目要求我从名为 'input.txt' 的文件中读取输入并读取

  1. 检查一个单词是否为回文,如果是则将其写入palindrome.txt
  2. 使用凯撒密码,移动13位写入cipher.txt

虽然第二部分似乎工作正常,但我遇到了一些回文未写入文件的问题,即使回文函数确实将它们识别为回文(单独测试)。我的 input.txt 测试文件包含以下文字:

madam quesadilla starman wow cheese racecar

同时 'madam''racecar' 正确地写入 palindrome.txt,哇,没有。还尝试了另一个回文 'beeb' ,它也没有写入文件。如前所述,我相信 isPalindrome 函数运行良好,而 input.txt 的所有单词也已正确更改为 cipher.txt(因此不会完全跳过这些单词)。目前不知道是什么导致了这个问题。以下是我的代码:

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

int isPalindrome(char str[])
{
    char t[100];
    int n = strlen(str);
    for(int i=0; i<n; i++)
    {
        t[i] = str[n-i-1];
    }
    if(!strcmp(str, t))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

char* cypher(char str[])
{
    char *encrypted = malloc( sizeof(char) * 100);
    int n = strlen(str);
    for(int i=0; i<n; i++)
    {
        if(str[i] >= 65 && str[i] <= 90)
        {
            encrypted[i] = (str[i]+13-65)%26+65;
        }
        else if(str[i] >= 97 && str[i] <= 122)
        {
            encrypted[i] = (str[i]+13-97)%26+97;
        }
    }
    return encrypted;
}  

int main (void)
{
    FILE *fin, *fpal, *fcip;
    char str[32];
    int ret;
    char *encrypted;

    fin = fopen( "input.txt", "r");
    fpal = fopen( "palindrome.txt", "w");
    fcip = fopen("cipher.txt", "w");

    ret = fscanf( fin, "%s", str );
    while(ret==1)
    {
        if(isPalindrome(str))
        {
            fprintf(fpal, "%s\n", str );
        }
        encrypted = cypher(str);
        fprintf(fcip, "%s\n", encrypted);
        free(encrypted);
        ret = fscanf(fin, "%s", str );
    }

    fclose(fin);
    fclose(fpal);
    fclose(fcip);
    return 0;
}

您的 isPalindrome() 函数已损坏 — 它不会空终止字符串 t。我在 main():

中调用 isPalindrome() 之前添加了一个简单的 printf() 语句
printf("word [%s] %d\n", str, isPalindrome(str));

当运行破解版时,我得到:

word [madam] 1
word [quesadilla] 0
word [starman] 0
word [wow] 0
word [cheese] 0
word [racecar] 0
word [beeb] 0

isPalindrome()中的循环之后,添加:

t[n] = '[=12=]';

则输出为:

word [madam] 1
word [quesadilla] 0
word [starman] 0
word [wow] 1
word [cheese] 0
word [racecar] 1
word [beeb] 1

我也遇到了崩溃,因为您的代码没有检查文件是否已成功打开。始终检查文件是否已成功打开。