C言語です。ファイルにあるシーザー暗号(a-zのみ)を1から26文字シフトの全パターンを表示させて、復号するプログラムを作りたいのですが、
C言語です。ファイルにあるシーザー暗号(a-zのみ)を1から26文字シフトの全パターンを表示させて、復号するプログラムを作りたいのですが、 画像のように復号結果がなぜか表示されません。原因、対処法を教えてほしいです。 参照元のファイルからの暗号の取得はできているのを確認済みなので、おそらく原因はkeyが出てくるアルゴリズムからだと思います。 画像は実行結果です。 以下、ソースコードです。〇〇〇はインデントです。 #include<stdio.h> int main(void) { 〇〇〇FILE* fp; 〇〇〇char crypto[11] = { 0 }; 〇〇〇char ignore[32] = { 0 }; 〇〇〇char result[11] = { 0 }; 〇〇〇int i = 0; 〇〇〇int key = 0; 〇〇〇fp = fopen("../5-2/5-2-result.txt", "r"); 〇〇〇if (fp != NULL) { 〇〇〇〇〇〇for (i = 0; i < 2; i++) { 〇〇〇〇〇〇〇〇〇fgets(ignore, 32, fp); 〇〇〇〇〇〇} 〇〇〇〇〇〇(void)fscanf(fp, "%s %s", &ignore, &crypto); 〇〇〇〇〇〇fclose(fp); 〇〇〇} 〇〇〇else { 〇〇〇〇〇〇printf("読み込みに失敗しました"); 〇〇〇} 〇〇〇for (key = 0; key < 26; key++) { 〇〇〇〇〇〇while (crypto[i] != '\0') { 〇〇〇〇〇〇〇〇〇result[i] = crypto[i] + key; 〇〇〇〇〇〇〇〇〇if (result[i] > 'z') { 〇〇〇〇〇〇〇〇〇〇〇〇result[i] -= 'z' - 'a' + 1; 〇〇〇〇〇〇〇〇〇} 〇〇〇〇〇〇〇〇〇i++; 〇〇〇〇〇〇} 〇〇〇〇〇〇printf("鍵 %dで復号: %s\n", key, result); 〇〇〇} 〇〇〇return 0; }
ベストアンサー
データがないので試してませんが、多分↓の所に i=0; が抜けているだけだと思います。 for (key = 0; key < 26; key++) { i = 0; //////// while (crypto[i] != '\0') {
この返信は削除されました