2017-11-22 1 views
1

stdin行が空のときにどのようにwhileループを終了できますか?getlineで行が空のときループを終了する

#include <unistd.h> 
#include <stdio.h> 

int main(){ 

    FILE* stream = popen("sort", "w"); 
    char *line = NULL; 
    size_t size; 

    while (getline(&line, &size, stdin)) { 
     fprintf(stream,"%s\n", line); 
    } 

    pclose(stream); 
    return 0; 
} 

getline != -1場合、私はラインの長さをチェックし、確認してみました、それは動作しません。

+0

getlineはエラーまたは-1でEOFを返します。while(-1){} 'は永遠に実行されます。 – wildplasser

+0

ああ、わかりました。そして、行が空であるかどうかをどうやって確認できますか? –

答えて

4

問題は、読んだ改行です。

あなたがループに

if (*line == '\n') break; 

を追加すると意図したように、それはおそらく動作します。 getline()を-1の戻り値としてテストすることをお勧めします。

+0

それはトリックでした。ありがとう –

関連する問題