ページ 11

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

Posted: 2014年12月10日(水) 22:26
by カヌー
シーザー暗号を解読するプログラムを作成しているのですがプログラムを実行するとうまく表示されない部分があります。下記にコードを貼り付けます。何が悪いのか指摘していただけると助かります。

コード:

#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;
}

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

Posted: 2014年12月10日(水) 22:33
by みけCAT
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;
}

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

Posted: 2014年12月10日(水) 22:45
by カヌー
みけさんありがとうございます!
試してみたところ無事表示されました。