c言語 シーザー暗号の解読のプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
カヌー
記事: 45
登録日時: 11年前

c言語 シーザー暗号の解読のプログラム

#1

投稿記事 by カヌー » 10年前

シーザー暗号を解読するプログラムを作成しているのですがプログラムを実行するとうまく表示されない部分があります。下記にコードを貼り付けます。何が悪いのか指摘していただけると助かります。

コード:

#include <stdio.h>
int main(void)
{
	char anngou[1000];
	char buff[27]={"abcdefghijklmnopqrstuvwxyz"};
	int i, shift;

	printf("暗号化された文字列を入力してください(a~z):");
	scanf("%s", &anngou);
	for(shift=0; shift<26; shift++)
	{
		printf("鍵%dの場合:", shift);
		for(i=0; anngou[i]!='\0'; i++)
		{
			if( buff[anngou[i]-'a'-shift]>=0)
			{
				printf("%c", buff[anngou[i]-'a'-shift]);
			}
			else
			{
				printf("%c", buff[anngou[i]-'a'-shift+26]);
			}
		}
		printf("\n");
	}

	return 0;
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: c言語 シーザー暗号の解読のプログラム

#2

投稿記事 by みけCAT » 10年前

9行目と15行目が間違っていると思います。

コード:

#include <stdio.h>
int main(void)
{
	char anngou[1000];
	char buff[27]={"abcdefghijklmnopqrstuvwxyz"};
	int i, shift;

	printf("暗号化された文字列を入力してください(a~z):");
	scanf("%s", anngou); /* &は付けないべき(つけると警告が出る) */
	for(shift=0; shift<26; shift++)
	{
		printf("鍵%dの場合:", shift);
		for(i=0; anngou[i]!='\0'; i++)
		{
			if( anngou[i]-'a'-shift>=0) /* 例えばanngou[i]が'a'、shiftが1だと、anngou[i]-'a'-shiftが負になり、元のコードでは確保された範囲の外にアクセスしてしまう */
			{
				printf("%c", buff[anngou[i]-'a'-shift]);
			}
			else
			{
				printf("%c", buff[anngou[i]-'a'-shift+26]);
			}
		}
		printf("\n");
	}

	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

カヌー
記事: 45
登録日時: 11年前

Re: c言語 シーザー暗号の解読のプログラム

#3

投稿記事 by カヌー » 10年前

みけさんありがとうございます!
試してみたところ無事表示されました。

閉鎖

“C言語何でも質問掲示板” へ戻る