循环请求输入直到使用C的ctrl-d

时间:2014-09-10 16:15:20

标签: c

我想创建一个while循环,不断询问用户输入,直到用户ctrl-d出来。我该怎么做才能正确?我现在正在使用它:

 while (1)
    {
        printf("Enter host name: ");
        fgets(user_input, 1000, stdin);
    }

这是有效的,除了用户必须按ctrl-c结束程序。我想要不断询问用户他的输入,直到他/她点击ctrl-d。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您必须测试EOF,这是CTRL-D返回的内容。

这样做:

while ( fgets( ... ) != NULL ) {
    ...
}

编辑:

既然你在提示,那就更好了:

for ( ;; ) {
    printf( "enter input: " );
    fflush( NULL );   // make sure prompt is actually displayed, credit Basile Starynkevitch
    if ( fgets( input, ... ) == NULL ) break;

    // handle input here
}

答案 1 :(得分:0)

ctrl-d将发送EOF(文件结尾)字符,该字符将fgets转换为NULL指针:

while (fgets(user_input, 1000, stdin) != NULL) {
    // do stuff...
}
// no more user input