2013-01-31 13 views
5

私はCの初心者ですので、この質問が愚かであるか奇妙なことに尋ねている場合は、私を許してください。 a newline character or not、私は理解できませんでした -真の条件がテストされた後、printfはどのように実行されますか?

は、私はCプライマープラス章-8の例のいずれかを読んでいると、ユーザーが入力したかどうかをテストするいくつかのループです。 while (getchar() != '\n')は、最初のchがいたテストして、すべての

while (getchar() != '\n') 
       continue; 
      printf("Enter another character and two integers;\n"); 
      printf("Enter a newline to quit.\n"); 

まず:

コードが短いですので、私はあなたにそれを表示します:どのような私が理解しないことは右ここにある

int main(void) 
{ 
    int ch; /* character to be printed */ 
    int rows, cols; /* number of rows and columns */ 
    printf("Enter a character and two integers:\n"); 
    while ((ch = getchar()) != '\n') 
    { 
     if (scanf("%d %d",&rows, &cols) != 2) 
      break; 
     display(ch, rows, cols); 
     while (getchar() != '\n') 
      continue; 
     printf("Enter another character and two integers;\n"); 
     printf("Enter a newline to quit.\n"); 
    } 
    printf("Bye.\n"); 
    return 0; 
} 
void display(char cr, int lines, int width) // the function to preform the printing of the arguments being passed 

右に入った? 第2に、それが真実なら、どのようにしてprintfステートメントをスキップして最初の状態に進まないのでしょうか?それは何をすべきか? TNX

+1

"私はCプライマープラスを読んでいます" <---それはあなたの最大の問題です!火災でその本を殺す! RTFN –

+3

'continue'はただの煙です。 'while(getchar()!= '\ n');'とするのが良いでしょう。 –

+0

ありがとうございます:) @Daniel Fischer – MNY

答えて

7

があるのでwhileステートメントの後の中括弧はなく、非常に次の行だけがループに含まれます。したがって、continueは、新しい行の文字が見つかるまでwhileループを継続し、実行はprintfステートメントに続きます。

それは、これに相当します

while (getchar() != '\n') 
{ 
    continue; 
} 
+2

+1ここに尋ねる人の本当の問題になるための+1。 – HWende

+0

返事にとても感謝します!コンパイラがgetchar()関数を参照すると、ユーザーが文字を入力してテストしてから続行するように求められますが、このgetchar()は以前の入力をテストしていますか?@SShaheen – MNY

+1

@Nir入力バッファにまだ未使用の入力がある間、 'getchar()'はバッファから文字を読み込むだけです。通常、 'stdin'からの入力はユーザがReturn/Enterを押した後にのみプログラムに送られます。したがって、getchar()が最終的に見つけるために常にバッファに改行があります。バッファに未使用の入力がなく、ストリームがクローズまたは破損していない場合、 'getchar()'は入力がバッファに渡されるまでブロックします。 –

1

ザ・続行

はわずか2 printfwhileに適用されるには、あなたが\nを入力するときは、しばらく前にラインに最も内側から抜け出すますので-s

printf("Enter another character and two integers;\n"); 
0

continueが最も近いwhileループに適用されます。

while (stuff) 
    continue; 

while (stuf); 

(セミコロンに注意してください)と同じです。

「条件がfalseになるまでループを繰り返す」と言うだけです。

0

ここで、while()ループはcontinue文にのみ関連付けられています。 それではprintfステートメントとの関係はありません..........

関連する問題