2017-12-21 4 views
2

私のコードに問題があります。 (userDigit < = 6 & & userDigit> = 1)いつも無視しています。誰かが私に何か間違っていると教えてもらえますか?getch()の後にプログラムは〜を置いた後でもifを無視します。

 for(i=0; i<4; i++) 
     { 
      userDigit=getch(); 
      putch(userDigit); 

      if(userDigit<=6 && userDigit>=1) 
      { 
       //code    
      } 
      else 
      { 
       correct=0; 
      }      
     } 

     if(correct == 0) 
     { 
      printf("wrong"); 
      correct++; 
     } 
+5

'getch'は数字ではなく文字を返します。だから数字ではなく文字と比較する。 –

+4

文字は '6'、数字は6です。 – stark

答えて

1

getch()入力された文字ではなく数字自体の符号化された値を表すintを返します。

幸いC規格では、あなたは数字の実際の数値に変換するために

userDigit = getch() - '0'; 

を書くことができます。数字以外の入力は範囲外です(0〜9)。当然のことながらその

あなたputch機能(粗あなたが'0'を追加することにより、バック変換可能性を)解除されます(誤解を避けるために'0' C.でintタイプです)、私はデバッグ目的のためにあなたがそこにそれを持っている疑いがあるとのことができます。安全に取り外します。

+1

コードはコンパイルされません... -1 –

+0

私はコーヒーが必要ですか? – Bathsheba

+0

はい、ビット:)修正された構文エラー –

1

変更

if(userDigit<=6 && userDigit>=1) 

ので、 '0'、 '1'、...シンボルは必然的なASCIIコードを持って比較が有効になるように動作します

if(userDigit<='6' && userDigit>='1') 

へ。

+0

説明してください。 –

+0

説明はすでにバテシバの答えで行われています。 '0'、 '1'、...シンボルには結果のコードがあるので、比較は有効です –

+0

もしそうなら、あなたは答えを取り除くことができます(質問は '既に回答済みです') –

関連する問題