2017-01-04 13 views
1
int main() 
{ 
    int c; 
    c = getchar(); 
    while (c!=EOF){ 
     putchar(c); 
     c=getchar(); 
    } 
    return 0; 
} 

上記のコードでは、値-1を入力するとループが終了しません。 EOFの
値= -1私はCtrlキー + Dを使用する場合なぜループが終了しないのですか?

main() 
{ 
    printf("EOF is %d\n",EOF); 
} 

コードが終了します、このコードから得た、Ctrlキーを使用せずに同じコードを終了させる他の方法があります+ D

+0

値 '-1'は2文字なので、 'getchar()'では-1と見なされません – user3629249

答えて

8

コンソールの-1と入力すると、EOFが生成されないためです。代わりにgetchar()は、それを2つの別の文字'-''1'として読み取ります。

-1入力で終了したい場合は、2文字を追跡して比較して、EOFと比較するのではなくループを終了する必要があります。しかし、それは実際にはEOFを生成することと同じではありません。

終了するもう1つのオプションは、入力リダイレクト<をコンソールに使用して標準入力をファイルにリダイレクトすることです。入力ファイルからの読み込みが終了すると、EOFが通知されます。

1

ctrl + Dを押さずにコードをループしたい場合は、複数の方法があります。基本的なif条件を使用して、最も簡単で非効率的な方法を示します。コードを読んでください。疑問がある場合は、自由にコメントしてください。

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

int main() 
{ 
int c; 
c = getchar(); 
while ((c != EOF)) 
{ 
    if (c == 'i') 
     break; 
    putchar(c); 
    c = getchar(); 

} 
return 0; 
} 
関連する問題