このプログラムは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));
}
EDIT:私は気付かずにそこに戻り、到達不能エラーを修正します。しかし、なぜ私はまだ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;
}
EDIT:OK最終的にそれを固定し、非常に多くの愚かなエラーが、助けてくれてありがとう。また、プログラムは、別の値を入力するかどうかをユーザーに尋ねる必要があります。入力した場合は、プロセスを繰り返します。これを行う方法はたくさんあります。あなたが思っていることが最良の方法であると思っているのではないでしょうか。
これらのステートメントは、実際には '(c + 13);'、 '(c-13);および' c; 'のようになりますか?私はcについてはよく分かりませんが、Cでは意味がありません。 – Jodrell