このプログラムは、入力に rot13 を適用するためのものです。ただし、コンパイルすると、行 20、23、29 はコードに影響を与えず、行 17 は到達不能なコードであるという警告が表示されます。何かを入力すると、プログラムが続行され、空白が残ります。どうしたの?
int main()
{
int c;
while ( ( c = getchar() ) != EOF )
putchar( r13( c ) );
return 0;
}
int r13(int c)
{
if(( tolower( c ) >='a' && c <='z'))
{
if((c) < 'm')
(c = c + 13);
else
{
(c = c - 13);
}
}
else
c = c;
return ( isalpha( c ) );
}
編集: 気付かずにそこに愚かに return を入れて、到達不能エラーを修正しました。しかし、c+13 と c-13 が効果がない理由がまだわかりません。
EDIT:rot13エンコーダー/デコーダーであるCでプログラムを作成したかったのです。これは元のコードであり、正常に動作します。しかし、モジュラス設計に転向したかったのですが、知識不足で失敗に終わりました。これが、私がやろうとしていることを人々が理解するのに役立つことを願っています.
int main(void)
{
int c,e;
while((c=getchar())!=EOF)
{
if(c >='A' && c <='Z')
{
if((e = c + ROT) <= 'Z')
putchar(e);
else
{
e = c - ROT;
putchar(e);
}
}
else if(c >='a' && c <='z')
{
if((e= c + ROT) <= 'z')
putchar(e);
else
{
e = c - ROT;
putchar(e);
}
}
else
putchar(c);
}
return 0;
}
編集:わかりました、最終的に修正しました。多くのばかげたエラーです。助けてくれてありがとう。また、プログラムはユーザーに別の値を入力するかどうかを尋ね、必要な場合はプロセスを繰り返す必要があります。これを行うには非常に多くの方法がありますが、皆さんがそれを行う最良の方法は何だと思いますか。