为什么读取不起作用fgets在我的程序中工作正常?

时间:2013-04-05 01:20:04

标签: c cygwin system-calls fgets

所以我的程序的特定部分如下所示:

printf("Please input command:\n>");
While 1 {
    if ((int c = read(STDIN_FILENO, input, Buffer_size) == 0) {
        break;
    }
    rest of the program uses strtok to break the input 
    down and store in array. Then pass it to a function which checks for 
    various commands and prints whatever was the command 
    suppose to do or gives syntax error for incorrect commands

    printf(">"); //last line

}

所以这就是发生的事情:

Please input command:
addperson Batman
>person added
blahblah
Error: incorrect syntax

由于某种原因,它不会打印:“>”。此外,每当我输入任何内容之后,即使使用正确的命令也会说同样的事情。

但如果我使用它:

printf("Please input command:\n>");
while 1 {
    if (fgets(input, Buffer_size, stdin) == NULL) {
        break;
    }
    ...
    printf(">");

}

我明白了:

Please input command:
> add_person Batman
person added
> blahbagwa
Incorrect syntax
> add_person Superman
person added

注意“>”出现在每个输出?我真的不知道为什么读取不正常;也许我对阅读的理解不是很好。有没有人有任何想法?

1 个答案:

答案 0 :(得分:-1)

read()将阻塞,直到它收到足够的输入来填充整个缓冲区,其中fgets()将为每个输入的行返回一个缓冲区。