首先来说说他们的不同:
1.scanf()可以接收各种类型的数据:整型,浮点型,字符.........
2.getchar()只能接收字符类型。
scanf()大家一定都非常熟悉了,我们来看看getchar()的工作原理。
首先说明,getchar()只能读取一个字符
我们从键盘上输入一个字符,getchar()从位于键盘后的输入缓存区将字符数据进行读取,例如:
输入A(回车)
getchar()读取A,还会剩下一个\n没有读取,当编译器编译后,也会将\n再次输出,如下图所示:
故通过此特点,我们可以将getchar()用于输入密码时的编译。
我们先来最原始的代码,代码和运行结果如下:
键盘输入为:123456\n, scanf()会读取123456,\n由getchar()读取,故当代码运行到if的判断语句时,ch内只有\n,并没有Y or N。
我们对此代码进行改进,如下
但是将密码改成:123456*****时(*代表空格),上述代码又无法使用了,
我们对其进行进一步改进,代码及结果如下
我们用一个while()循环来将密码中的空格和\n吃掉。
一个简单的密码编写就完成了。