我一直致力于一个字符转换程序,该程序应该在文本文件中按照用户选择的左右两次移动大小写字母,然后输出移位的字母到另一个文本文件。该程序将输出任何数字而不移动它们。程序应该能够做的一个例子是将文本字母向右移动三个字母,如果你将输出反馈到程序中并向左移三个字母,我应该得到我开始的文本。 。我遇到的问题是在程序移动文本后我将输出重新放入并向相反的方向移动相同的次数我不能得到我的开头。我无法弄清楚如何让方向走向正确的方向。有人告诉我将方向设置为1和-1,但程序仍然没有做正确的事情。我究竟做错了什么?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#define MAX_SHIFT 25
#define WRAP_ALPHABET 26
#define MIN_LOWER 97
#define MAX_LOWER 122
#define MIN_UPPER 65
#define MAX_UPPER 90
#define FNLEN 100
int main(void)
{
FILE *ptInFile;
FILE *ptOutFile;
int input;
short int shift;
short int direction;
char strFileNameIn[FNLEN];
char strFileNameOut[FNLEN];
printf("Enter name of file to be encoded.\n");
scanf("%s", strFileNameIn);
printf("Enter name of file to save output to.\n");
scanf("%s", strFileNameOut);
printf("Enter number to shift characters by:\n");
scanf("%hu", &shift);
direction = 1;
direction = -1;
shift = direction * shift;
ptInFile = fopen(strFileNameIn, "r");
ptOutFile = fopen(strFileNameOut, "w");
while ((ptInFile = fopen(strFileNameIn, "r")) == NULL)
{
printf("%s is an invalid name.\n", strFileNameIn);
printf("Please enter valid file name. ");
scanf("%s", strFileNameIn);
}
while ((input = getc(ptInFile)) != EOF)
{
if (isalpha(input))
{
if(islower(input))
{
input += shift;
input++;
if (input < MIN_LOWER)
{
input += WRAP_ALPHABET;
input++;
}
if (input > MAX_LOWER)
{
input -= WRAP_ALPHABET;
input++;
}
}
else
{
if(isupper(input))
{
input += shift;
input++;
}
if(input < MIN_UPPER)
{
input += WRAP_ALPHABET;
input++;
}
if(input > MAX_LOWER)
{
input -= WRAP_ALPHABET;
input++;
}
}
}
putc(input, ptOutFile);
}
fclose(ptInFile);
fclose(ptOutFile);
printf("\nPress enter to end the program.\n");
fflush(stdin);
getchar();
return 0;
}