仅某些回文被写入文件

问题描述 投票:0回答:1

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

  1. [检查单词是否是回文,如果是,请写到palindrome.txt
  2. 使用凯撒密码,将其移动13个位置并将其写入cipher.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; }
c file-io palindrome caesar-cipher
1个回答
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

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

© www.soinside.com 2019 - 2024. All rights reserved.