2012-03-19 19 views
2

私はansi cでCを学習していますが、質問があります。C Enterキーで停止

私は、ユーザーがenterを入力したときにコンソールからの読み取りを停止する必要があります。

理想的には、ユーザがこの

1 2 3 4 5 

と右のプログラム5を入力した後、出力

1 
2 
3 
4 
5 

は、私はこのコードを持っているでしょう入力します:

#include <stdio.h> 
#include <stdlib.h> 

#define SIZE 5 

int main() 
{ 
    int vector[SIZE] = {0}, number, counter = 0,i; 

    while (scanf("%d", &number) != EOF && counter < SIZE){ 
     vector[counter] = number; 
     counter++; 
    } 

    for (i = 0; i < counter; i++){ 
     printf("%d\n", vector[i]); 
    } 

    return 0; 
} 

さて、プログラムの場合を私は1 2 3 4 5を入力してEnterキーを押しても止まらず、入力すると1 2 3 4 5 6プログラムは停止します。

2つのもの。

私はそれが何もしていないEOFまでスキャンする条件を信じています。第二に、プログラムが停止したばかりなので、プログラムが停止するcounter < SIZE

ユーザーヒットの入力後にはどうすれば停止できますか?

おかげ

答えて

3

1つのオプションは、あなたの条件の順序を交換することです。この変更により、5が処理された後にユーザーがenterを押す前に、プログラムがwhileループをすぐに終了します。これはcounter < SIZEと評価されます。

(このオプションを選択した場合、それは印刷を開始する前に、あなたはまた、ユーザが押されていないので、あなたは数字を繰り返すために開始する前に終了行の文字を印刷したい入力します)


あなたの場合ユーザーがenterを押したときにプログラムをループから抜けたい場合は、scanfを変更する必要があります。 scanf(%d...は数字を読み取り、末尾の文字はではなく、の数字です。

0

はその\nかどうかを確認するために、入力の最後の文字をチェックしてみます。 ENTEREOFを構成しませんが、通常は\n文字です。それはcounter < SIZEを評価する前に)条件は、左から右へevalulatedされると、あなたのプログラムが(scanf(%d...経由)新しい入力待ち

while (counter < SIZE && scanf("%d", &number) != EOF){ 

1

はここに私の頭の上から一つのアプローチです(警告、未テスト):

int number; 
char nl = 0; 

while (counter < 5 && scanf("%d%c", &number, &nl) != EOF) 
{ 
    ... 
    /** 
    * If we picked up a newline, exit the loop. 
    */ 
    if (nl == '\n') 
    break; 
} 
関連する問題