C语言控制台实现:怎样让输入的字符不回显

要求:1.控制台程序,不要使用setwindowshook等等2.只能使用C99标准库,就是意味着我们不能使用getch之类的conio.h声明的函数 效果就行GNU/Linux的su指令一样

用getch()即可,头文件#include<conio.h>程序例:模拟密码的输入我的百度空间: http://hi.baidu.com/mayadong7349/blog/item/c6ab89d1c7d64338960a16e8.html在百度贴吧看到的你的帖子 嘿嘿#include<conio.h>
#include<stdio.h>
int main()
{
char ch[17];
int i=0;
while(1)
{
ch[i]=getch();
if(ch[i]=='\r')
break;
printf("*");
i++;
}
ch[i]='\0';
printf("\n您刚才输入的密码是:\n%s\n",ch);
return 0;
}有啥疑问可以交流
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-05-16

linux下的getch实现,获取密码

#ifndef _WIN32//非windows下getch处理
int getch()
{
 struct termios oldt, newt;
 int ch;
 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;
}
#endif
//获取密码,密码字符串pwd和pwd长度pwd_len
void getpwd(char* pwd,int pwd_len)
{
 int i = 0;
 char let = 0, ch = '*';
 while (i <= pwd_len && let != '\r'&&let != '\n')
 {
  let = getch();
  if (let != '\b'&&let != 127)
  {
   pwd[i++] = let;
   putchar(ch);
  }
  else
  {
   if (i>0)
   {
    pwd[--i] = 0;
    putchar('\b');
    putchar(' ');
    putchar('\b');
   }
  }
 }
 if (let != '\n')
  --i;
 pwd[i] = 0;
 putchar('\b');
 putchar(' ');
 putchar('\b');
}

相似回答