我编写了代码来执行凯撒移位密码,从名为“input.txt”的文件中获取输入并将输出写入名为“output.txt”的文件中。它在技术上运行良好;输出几乎完美,但是当我运行它时,我收到一条Debug Assertion Failed
消息,说明Line 56
哪一行是关闭输出文件的行。错误还说:表达式:(unsigned)(c+1) <= 256
。这是我的代码:
void cipher(char input[], int key);
int main()
{
int i, key=0;
char c, input[MAX];
FILE *file1;
file1 = fopen("input.txt","r");
printf("Enter the key: ");
scanf("%d", &key);
getchar();
for(i=0;(c=getc(file1))!=EOF && i<MAX;i++)
input[i]=c;
fclose(file1);
cipher(input, key);
return 0;
}
void cipher(char input[], int key)
{
int length = strlen(input)-1;
int i;
char c;
FILE *file2;
file2 = fopen("output.txt","w");
for (i=0;i<length;i++)
{
if (isalpha(input[i]))
{
c = (toupper(input[i]) - 'A'+key) % 26 + 'A';
fprintf(file2, "%c", c);
}
else if (input[i]==' ')
fprintf(file2, "\n");
}
fclose(file2);
}
哦,还有一个不那么紧迫的问题,但是当代码吐出输入时,如果输入改变行,比如“输入文本\n 这里”,那么当它对“文本”和“这里”进行密码时,它会将它们放在一起而不是像应该的那样将它们放在单独的行上。如果有人知道这是为什么并且可以帮助我,我将不胜感激,但主要是那个错误。