0

例如,用户可以输入ls 或ls command. 该命令可能不会每次都出现。如何检查用户是否输入了命令?的情况下scanf(),如果命令存在,程序可以正常工作,但如果命令不存在,那么它将等待输入。我不希望程序等待这个输入

4

3 回答 3

3

select可用于此目的。因此,您可以在进行(阻塞)读取之前查询标准输入(超时或非阻塞),如果有要读取的内容。

select() 和 pselect() 允许程序监视多个文件描述符,等待一个或多个文件描述符“准备好”用于某种类型的 I/O 操作(例如,可能的输入)。如果可以在没有阻塞的情况下执行相应的 I/O 操作(例如 read(2)),则认为文件描述符已准备就绪。

于 2012-09-20T17:03:33.337 回答
0

所有标准 C 库输入函数都是面向行的,这意味着它们要等到用户输入某些内容,或者至少按下回车键。

如果您想以比这更多的交互方式响应输入,那么您将需要使用标准库之外的东西。您所拥有的确切内容将取决于您正在编码的平台。

于 2012-09-20T17:03:17.810 回答
0

不要使用scanf. 相反,用于fgets读取整行。然后处理该行,例如标记它 ( strtok) 并计算它包含多少个单词:

char buf[1024];

fgets(buf, sizeof buf, stdin);    // returns after user presses Enter
                                  // (should check that this is not NULL)
char * p = strtok(buf, " \t\n");
while (p)
{
    // p now points to a token
    p = strtok(NULL, " \t\n");
}
于 2012-09-20T17:06:20.620 回答