0

このプログラムは、入力に 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;
}

編集:わかりました、最終的に修正しました。多くのばかげたエラーです。助けてくれてありがとう。また、プログラムはユーザーに別の値を入力するかどうかを尋ね、必要な場合はプロセスを繰り返す必要があります。これを行うには非常に多くの方法がありますが、皆さんがそれを行う最良の方法は何だと思いますか。

4

6 に答える 6

1

c = c + 13;cの値c = c - 13;を変更する必要があり ます。cの値を返すには、次が必要です。return c;

于 2011-05-15T09:39:16.190 に答える
1

あなたは何をすることを期待(c + 13);していますか?これは評価するだけです...しかし何もしません。変更されませんcc値を含むように変更するには、次のc + 13ように記述する必要がありc = c + 13; ます。cを「char」ではなく「int」として宣言していることに注意してください。

また、どうしたの else c;

それは何をすることになっていますか?

プログラミングの基礎を勉強することであなたは恩恵を受けると思います。特に、=は代入演算子です。それが機能する方法は、右側の式が左側=の変数(またはconst)に「割り当てられる」ことです。c = c + 13; したがって、cを13インクリメントするには、 Thisを記述c + 13して、その値を。内に固定する必要がありますc

もう1つの重要な概念はreturn、関数の内部です。値を返すと関数が終了し、関数を呼び出していたものにその値が提供されます。コンピューターはすべてを順番に実行するため、関数の先頭にreturnステートメントを指定すると、残りのコードは実行されないことに注意してください。

于 2011-05-15T09:41:13.157 に答える
1

はい、効果はありません。return何を言っているのかわかりませんが、前にあるキーワードが抜けているだけですか?

于 2011-05-15T09:30:56.553 に答える
0

あなたは前に戻っていますif()

int r13(int c) 
{ 
   return ( isalpha( c ) );        //put it last line of your function

   if(( tolower( c ) >='a' && c <='z'))   //this will be unreachable
    .....
}

説明:

returnステートメントは、関数が呼び出されreturnたときにステートメントの下のコードを実行せずに制御の流れを送り返します。r13(int c)

于 2011-05-15T09:30:13.633 に答える
0

あなたのコードは...変です... 13行目以降のコードは、戻ったときに到達できませんisalpha(c)。コンパイラは正しいです。

コードの美学にももっと注意を払う必要があります (醜いコードはこの種のバグにつながる可能性があります)。

于 2011-05-15T09:30:42.163 に答える
0

r13 関数の先頭にある return ステートメントは、関数内の残りのすべてのコードを実質的に「デッド コード」にします。

于 2011-05-15T09:30:49.917 に答える