c语言getch替代方案

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值