2011-05-15 7 views
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)); 
} 

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最終的にそれを固定し、非常に多くの愚かなエラーが、助けてくれてありがとう。また、プログラムは、別の値を入力するかどうかをユーザーに尋ねる必要があります。入力した場合は、プロセスを繰り返します。これを行う方法はたくさんあります。あなたが思っていることが最良の方法であると思っているのではないでしょうか。

+0

これらのステートメントは、実際には '(c + 13);'、 '(c-13);および' c; 'のようになりますか?私はcについてはよく分かりませんが、Cでは意味がありません。 – Jodrell

答えて

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文はあなたのr13(int c)関数が呼び出されreturn声明以下のコードを実行せずに制御の流れを返送します。

0

コードは... ​​を返すと、13行目以降のコードには到達できません。コンパイラが正しいです。

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

0

r13関数のスターのreturn文は、関数内のコードの残りの部分を効果的に「デッドコード」にします。

1

はいはい。これらは効果がありません。あなたが意味するものを推測するのは難しいですが、それらの前にreturnのキーワードがありませんか?

1

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

1

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

はまた、アップすることを行うことになっている何 else c;

とは何ですか?

私は、プログラミングの基礎を勉強することで恩恵を受けると思います。特に、=は代入演算子です。それが動作する方法は、=の右側の式が、左側の変数(またはconst)に「割り当てられている」ということです。したがって、cを13だけ増やすには、c = c + 13;と書く必要があります。これはc + 13を評価し、その値をcの範囲内に収めます。

もう一つの重要な概念は、関数内にreturnです。値を返すと、関数が終了し、関数を呼び出すものにその値が渡されます。コンピュータはすべてを順番に実行するので、関数の先頭にreturn文を置くと、残りのコードは実行されません。

関連する問題