2017-03-08 10 views
-2

私はプロジェクトをやっているので、端末からデータを読み込む必要があります。端末からの入力を読む

したがって、プログラムは正常に開始され、ユーザーは何らかの指示をしなければなりません。 私は、プログラムがユーザから与えられた指示を待ち(ターミナルでテーピング)してからすべて実行するようにしたいと思います。

私は入力を得るために関数readしか使用できません。 今まで、私はそれが動作しますが、私はすべての命令を入力したいと思いますし、次に押すと、入力モードを終了し、それらを扱うをENTER

int main (void) 
{ 
    char line[50]; 
    int ret; 

    printf ("\nEnter string below\n"); 
    while ((ret = read(0, line, 50)) != -1) 
    { 
     line[ret] = '\0'; 
     printf ("result %s\n", line); 
    } 
} 

怒鳴る方法を見つけました。

可能ですか?また 、CRTL + D

おかげ

+1

'imput'? :D良い。 –

+1

あなたは 'read'関数を使用していません。あなたは' getline'関数を使用しています。インストラクターなどと確認してください。 –

+1

はい、可能です。入力情報やその表現方法をどのように管理するかは不明ですが、個々の文字列として管理したい場合は、文字列の配列(または、動的に割り当てられた文字列バッファを指す文字ポインタの配列) 。 – lurker

答えて

1

を使用して入力プログラムモードを終了する一般的な方法があり、私はあなたが

while (read(0, line, 50) > 0) 
    printf("%s\n", line); 

やるべきだと思う。しかし、あなたがそうするならば、あなたは、次の場合にトラブルを持っていますread関数が "行"バッファをリセットしないため、たとえば42文字の最初の入力と30の2番目の入力があります。 memsetを使用することができます。

なぜ> 0でないか!= -1:readは、エラーの場合は-1を返し、入力の最後の場合は0を返します。

関連する問題