我一直在谷歌搜索没有运气.我正在寻找一种方法来做getc()或gets()或任何不回应终端的方法.我看到了kbhit(),但这似乎不是ANSI的一部分.理想情况下,我希望代码看起来像
char s[100]; no_echo_gets(s); /* Won't echo to screen while being typed */ printf("%s\n", s);
有没有人知道一个良好的ANSI兼容的方式来做到这一点?
对于类UNIX系统,您希望使用ECHO标志...
#include... struct termios t; tcgetattr(fd, &t); t.c_lflag &= ~ECHO; tcsetattr(fd, TCSANOW, &t); ...
getpass命令存在于Linux中.但你可以制作一个更漂亮的版本,单独的系统回声不会消除对enter命令的需要,而击倒缓冲并不会在数据输入后杀死carraige返回的产生.将两者结合起来可以很好地逼近一个安静的入口.您可以添加星号以提供秘密条目外观,因此以下是两个建议的组合:
#include#include #include int getche(void); int main(int argc, char **argv){ int i=0; char d,c='h',s[6]; printf("Enter five secret letters\n"); s[5]='\0'; //Set string terminator for string five letters long do{ d=getche();//Fake getche command silently digests each character printf("*"); s[i++]=d;} while (i<5); printf("\nThank you!!\n Now enter one more letter.\n"); c=getchar(); printf("You just typed %c,\nbut the last letter of your secret string was %c\n",c,d); printf("Your secret string was: %s\n",s); return 0; } /* reads from keypress, echoes */ int getche(void) { struct termios oldattr, newattr; int ch; tcgetattr( STDIN_FILENO, &oldattr ); newattr = oldattr; newattr.c_lflag &= ~( ICANON | ECHO);\\knock down keybuffer tcsetattr( STDIN_FILENO, TCSANOW, &newattr ); system("stty -echo");\\shell out to kill echo ch = getchar(); system("stty echo"); tcsetattr( STDIN_FILENO, TCSANOW, &oldattr ); return ch; }