我正在尝试创建一个暂停用户输入的简单命令.我认为它在Bash脚本中很有用.
这是我的代码:
#include <stdio.h>
int main() {
char key[1];
puts("Press any key to continue...");
fgets(key,1,stdin);
}
Run Code Online (Sandbox Code Playgroud)
它甚至不会暂停用户输入.
我之前尝试过使用getch()(ncurses).发生的事情是,屏幕变成空白,当我按下一个键时,它又回到原来在屏幕上的内容,我看到:
$ ./pause
Press any key to continue...
$
Run Code Online (Sandbox Code Playgroud)
这有点像我想要的.但我想要的只是pauseDOS/Windows 中的命令(我使用的是Linux).
ccK*_*Kep 11
从GNU C Library手册:
功能:char*fgets(char*s,int count,FILE*stream)
fgets函数从流中读取字符,直到并包括换行符,并将它们存储在字符串s中,添加空字符以标记字符串的结尾.您必须在s中提供值空间的计数字符,但读取的字符数最多为1.额外的字符空间用于在字符串的末尾保存空字符.
所以,fgets(key,1,stdin);读取0个字符并返回.(阅读:立即)
使用getchar或getline代替.
编辑:一旦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");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34185 次 |
| 最近记录: |