#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;
}
c言語 シーザー暗号の解読のプログラム
c言語 シーザー暗号の解読のプログラム
シーザー暗号を解読するプログラムを作成しているのですがプログラムを実行するとうまく表示されない部分があります。下記にコードを貼り付けます。何が悪いのか指摘していただけると助かります。
Re: c言語 シーザー暗号の解読のプログラム
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で殴ればいい!(死亡フラグ)