C语言与接收键盘输入的函数有以下几个:scanf这个是大家都熟悉的,也是经常用到的;其次是接收字符输入的,如getchar,getch,getche(这个也是我刚刚知道的。)
1. getchar, getch, getche的区别
这三者都必须要包含头文件conio.h。最先我教学生使用这个是在main函数最后,可以让程序暂停一下。自己也没有注意有啥区别,甚至都不知道有getche函数的存在。问题出来了,有时候getchar不象想像的那么好用,甚至我希望它停顿的时候没有停顿。查了一下,才知道区别还是挺大的。不说了,转一下别人的例子:
接下来看一下getchar()
还有一点很重要的区别,是在给学生讲的时候才发现的,getchar并不是直接从键盘读的数据,它是从缓冲区读的。请看:
对了,这里getchar读取的是上一个输入,也就是scanf的换行符(10)。这一点在scanf中也存在,看看下面的例子:
对的,原理与getchar一样,还是回车符。显然这个c值不是我们所期待的。有啥办法解决,可能用getch来替代这里的scanf。
1. getchar, getch, getche的区别
这三者都必须要包含头文件conio.h。最先我教学生使用这个是在main函数最后,可以让程序暂停一下。自己也没有注意有啥区别,甚至都不知道有getche函数的存在。问题出来了,有时候getchar不象想像的那么好用,甚至我希望它停顿的时候没有停顿。查了一下,才知道区别还是挺大的。不说了,转一下别人的例子:
(1) getch()和getche()函数 这两个函数都是从键盘上读入一个字符。其调用格式为: getch(); getche(); 两者的区别是: getch()函数不将读入的字符回显在显示屏幕上, 而getche()函数却将读入的字符回显到显示屏幕上。 例1: #include<stdio.h> main() { char c, ch; c=getch(); /*从键盘上读入一个字符不回显送给字符变量c*/ putchar(c); /*输出该字符*/ ch=getche(); /*从键盘上带回显的读入一个字符送给字符变量ch*/ putchar(ch); } 利用回显和不回显的特点, 这两个函数经常用于交互输入的过程中完成暂停等功能。 例2: #include<stdio.h> main() { char c, s[20]; printf("Name:"); gets(s); printf("Press any key to continue..."); getch(); /*等待输入任一键*/ } |
接下来看一下getchar()
getchar()函数也是从键盘上读入一个字符, 并带回显。它与前面两个函数的区别在于: getchar()函数等待输入直到按回车才结束, 回车前的所有输入字符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。 getchar()函数的调用格式为: getchar(); 例3: #include<stdio.h> main() { char c; c=getchar(); /*从键盘读入字符直到回车结束*/ putchar(c); /*显示输入的第一个字符*/ getch(); /*等待按任一健*/ } |
还有一点很重要的区别,是在给学生讲的时候才发现的,getchar并不是直接从键盘读的数据,它是从缓冲区读的。请看:
- void main()
- {
- char a;
- char b[10];
- printf("please input a number:/t");
- scanf("%c",&a);
- printf("You input:%c/n", a);
- printf("Now, input a string:");
- scanf("%s", b);
- char c = getchar(); //猜猜这里c的值?
- return;
- }
- 1. void main()
- 2. {
- 3. char a;
- 4. char b[10];
- 5.
- 6. printf("please input a number:/t");
- 7. scanf("%c",&a);
- 8.
- 9. printf("You input:%c/n", a);
- 10.
- 11. printf("Now, input a string:");
- 12. scanf("%s", b);
- 13.
- 14. char c;
- scanf("%c",&c); //这个地方的c值呢?
- 16. return;
- 17. }