在C语言中是否有一个命令可以检查用户是否在不等待输入的情况下输入了输入

在C语言中是否有一个命令可以检查用户是否在不等待输入的情况下输入了输入,c,C,e、 g用户可以输入ls或ls命令。此命令可能不会每次都出现。如何检查用户是否输入了命令?对于scanf(),如果命令存在,程序工作正常,但如果命令不存在,则程序将等待输入。我不想让程序等待这个输入所有标准的C库输入函数都是面向行的,这意味着它们要等到用户输入一些东西,或者至少按下enter键 如果您希望以更具交互性的方式响应输入,则需要使用标准库之外的内容。确切地说,您可以使用什么将取决于您为哪个平台编写代码 所有标准C库输入函数都是面向行的,这意味着它们要等到用户输入某个内容,或者至少按下e

e、 g用户可以输入
l
s或
ls命令
。此命令可能不会每次都出现。如何检查用户是否输入了命令?对于
scanf()
,如果命令存在,程序工作正常,但如果命令不存在,则程序将等待输入。我不想让程序等待这个输入

所有标准的C库输入函数都是面向行的,这意味着它们要等到用户输入一些东西,或者至少按下enter键


如果您希望以更具交互性的方式响应输入,则需要使用标准库之外的内容。确切地说,您可以使用什么将取决于您为哪个平台编写代码

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

如果您希望以更具交互性的方式响应输入,则需要使用标准库之外的内容。确切地说,您可以使用什么将取决于您为哪个平台编写代码

可用于此目的。因此,您可以在执行(阻塞)读取之前,查询stdin(带超时或非阻塞),如果有要读取的内容

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

可用于此目的。因此,您可以在执行(阻塞)读取之前,查询stdin(带超时或非阻塞),如果有要读取的内容

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


不要使用
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");
}

不要使用
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");
}


还有
kbhit()
/
\u kbhit()
:在C语言中没有“command”这个词。有语句、表达式和函数。@PaulR不是Windows特有的吗?显然
\u kbhit()
是ISO:。@PaulR,我不知道ISO对你来说是什么,但是我在我的C标准版本中找不到这个函数。有
kbhit()
/
\u kbhit()
:C中没有“command”这样的东西。有语句、表达式和函数。@PaulR不是Windows特有的吗?显然
\u kbhit()
是ISO:。@PaulR,我不知道ISO对你来说是什么,但是我在我的C标准版本中找不到这个函数。@H2CO3是什么让你这么想的?@moooooo事实是,总有一些东西要读;问题在于是有多个令牌还是只有一个.PS。这个程序应该在ubuntu终端上运行。@user1686651我想你需要进一步描述你想在你的问题中实现什么。@user1686651那么你应该接受一个答案。可能是建议使用
fgets()
,或者提供一个你如何解决问题的自我答案。@H2CO3是什么让你这么想的?@moooooo总是有东西要读的事实;问题在于是有多个令牌还是只有一个.PS。这个程序应该在ubuntu终端上运行。@user1686651我想你需要进一步描述你想在你的问题中实现什么。@user1686651那么你应该接受一个答案。可能是建议使用
fgets()
,或者提供您如何解决问题的自我答案。我的意思是,如果用户输入例如“ls private”,我将使用scanf(),它将ls存储在变量中。现在我使用一个字符串比较函数。如果字符串匹配,那么程序应该检查ls之后是否已经写入了其他内容。如果是,则应扫描并进一步比较。但是如果用户只输入“ls”,那么它应该直接转到程序的其他部分。我的意思是,如果用户输入例如“ls private”,我将使用scanf()将ls存储在变量中。现在我使用一个字符串比较函数。如果字符串匹配,那么程序应该检查ls之后是否已经写入了其他内容。如果是,则应扫描并进一步比较。但是如果用户只输入“ls”,那么它应该直接转到程序的其他部分。