前提・実現したいこと
シーザー暗号を復号するプログラムの課題です
シフトする文字数は指定されていないので1文字、2文字、3文字...25文字
と1文字ずつシフトする文字数を増やして
文字のシフト終了後、strstr関数を用いて「the 」または「The 」(後ろに空白が入って4文字)
を見つけたら解読成功と判定し、解読結果とシフトした文字数を表示するプログラム
を作ろうとしています
(ポインタはまだ習っていないので使っていません)
最終的に以下のように実行することが目標です
解読するメッセージを入力してください:Jura gur png vf njnl gur zvpr cynl.
解読成功:
鍵 = 13, 平文 = When the cat is away the mice play.
書いたコードのおかしい部分を指摘していただけたら幸いです
発生している問題・エラーメッセージ
文字を入力は出来るのですが、入力後数秒経過してプログラムが終了します
該当のソースコード
C
1#include <stdio.h> 2#include <string.h> 3 4int main(void){ 5 char ct1[80]; 6 char ct2[80]; 7 char ct3[80]; 8 int k,j = 0; 9 int key = 1; 10 11 printf("解読するメッセージを入力してください:"); 12 scanf("%s",ct1); 13 14 for(j = 0; j < 80; j++) 15 ct2[j] = ct1[j]; 16 17 while(key<=25){ 18 while(ct2[k] != '\0'){ 19 if(('a' <= ct2[k]) && (ct2[k] <= 'z')){ 20 ct2[k] -= key; 21 if(ct2[k] < 'a') 22 ct2[k] += 26; 23 }else if (('A' <= ct2[k]) && (ct2[k] <= 'Z')){ 24 ct2[k] -= key; 25 if(ct2[k] < 'A') 26 ct2[k] += 26; 27 } 28 ct3[k] = ct2[k]; 29 k++; 30 key++; 31 } 32 printf("%s",ct3); 33 34 if((strstr(ct3,"the ") != NULL) || (strstr(ct3,"The ") != NULL)) 35 break; 36 } 37 38 printf("解読成功:\n"); 39 printf("鍵 = %d, 平文 = %s",key,ct3); 40 41 return 0; 42} 43
試したこと
どこかで無限ループしているのかなと仮定してwhileをforに変えたり、その逆をしてみたりしました。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。