等待用户inputC?

我试图做一个简单的命令,暂停用户input。 我认为这将是有用的Bash脚本。

这是我的代码:

#include <stdio.h> int main() { char key[1]; puts("Press any key to continue..."); fgets(key,1,stdin); } 

它甚至不会暂停用户input。

我早些时候尝试使用getch()(ncurses)。 发生了什么事,屏幕一片空白,当我按下一个键时,屏幕回到原来的状态,我看到:

 $ ./pause Press any key to continue... $ 

这是我想要的。 但是我想要的只是DOS / Windows(我使用Linux)中的pause命令。

Solutions Collecting From Web of "等待用户inputC?"

从GNU C库手册:

函数:char * fgets(char * s,int count,FILE * stream)

fgets函数从流流中读取包含换行符的字符,并将它们存储在字符串s中,并添加一个空字符来标记字符串的结尾。 您必须提供数量为s的空间值, 但读取的字符数最多为1 。 多余的字符空间用于在字符串末尾保存空字符。

所以, fgets(key,1,stdin); 读取0个字符并返回。 (立即阅读)

改用getchargetline

编辑:一旦count字符在流上可用,fgets也不会返回,它不断等待换行符,然后读取count字符,所以在这种情况下,“任何键”可能不是正确的措辞。

你可以使用这个例子来避免行缓冲:

 #include <stdio.h> #include <termios.h> #include <unistd.h> int mygetch ( void ) { int ch; struct termios oldt, newt; tcgetattr ( STDIN_FILENO, &oldt ); newt = oldt; newt.c_lflag &= ~( ICANON | ECHO ); tcsetattr ( STDIN_FILENO, TCSANOW, &newt ); ch = getchar(); tcsetattr ( STDIN_FILENO, TCSANOW, &oldt ); return ch; } int main() { printf("Press any key to continue.\n"); mygetch(); printf("Bye.\n"); } 

我不知道如何在帖子下添加评论,所以这不是一个真正的答案,而是一个评论,

在Linux中,Stdin被缓冲,所以你需要刷新它,这是在你的终端上按'enter'键。 看来你想读取一个无缓冲的流,即你想立即(不需要明确地刷新)按键的反应。

您可以使用文件描述符创建自己的无缓冲流,然后使用“getc”从中读取,您可能必须使用termios来设置其他人所建议的无缓冲输入。