我正在做一个项目,要求我从名为'input.txt'的文件中读取输入并到
尽管第二部分似乎工作正常,但我遇到了一些回文未写入文件的问题,尽管回文功能确实将它们识别为回文(对此进行了单独测试)。我的input.txt测试文件包含以下单词:
女士quesadilla starman哇奶酪赛车
虽然'[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;
}
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] = '\0';
然后输出是:
word [madam] 1
word [quesadilla] 0
word [starman] 0
word [wow] 1
word [cheese] 0
word [racecar] 1
word [beeb] 1
我也崩溃了,因为您的代码没有检查文件是否成功打开。始终检查文件是否成功打开。