「input.txt」というファイルから入力を取得し、「output.txt」というファイルに出力を書き込むシーザー シフト暗号を実行するコードを作成しました。技術的には問題なく動作します。出力はほぼ完全に出力されますが、実行すると、出力ファイルを閉じる行Debug Assertion Failed
に関するメッセージが表示されます。Line 56
エラーにも次のように表示されます: Expression: (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);
}
ああ、それほど差し迫った問題ではありませんが、コードが入力を吐き出すときに、入力が「input text\n here」のように行を変更した場合、「text」と「here」の暗号化を行うと、それらがまとめられます想定されているように、それらを別々の行に配置する代わりに。誰かがその理由を知っていて、私を助けてくれれば幸いですが、主なことはそのエラーです。