c语言使用getch的时候,c99下会出现下面错误:
error: implicit declaration of function 'getch' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
我们需要找一个替代方案,下面有个取巧的方法:
使用system,关闭终端缓冲和终端回显:
//需要包含头:stdlib.h
system("stty -icanon"); //关闭终端缓冲区
system("stty -echo"); //关闭终端回显
//代码块
system("stty icanon"); //打开终端缓冲区
system("stty echo"); //打开终端回显
接着就可以通过getchar来替代getch,这样做的原因是getchar是默认启用行缓冲区的,输入的时候不是从键盘读取字符的,所以我们需要先关闭终端缓冲区和终端回显。
下面是使用使用c语言模拟密码输入:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define MAXLEN 10
int main() {
char ch = 0;
int chint = 0;
int i = 0;
char pwd[MAXLEN];
system("stty -icanon"); //关闭终端缓冲区
system("stty -echo"); //关闭终端回显
printf("Input password: ");
while((ch = getchar())) {
chint = ch;
if (ch == '\n') {
printf("\n");
break;
}
if(chint==127 && i>0){ //按下删除键
i--;
pwd[i] = 0;
printf("\b \b");
}else if (i > MAXLEN - 1) {
continue;
}else if(isprint(ch)){ //输入可打印字符
pwd[i] = ch;
printf("*");
i++;
}
}
printf("The password is: %s\n", pwd);
system("stty icanon"); //打开终端缓冲区
system("stty echo"); //打开关闭终端回显
return 0;
}
结果显示:
hlsblog@mac inputpwd % ./inputpwd
Input password: *********
The password is: 1234313ab