跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

C语言中getchar()与putchar()函数详解

目录getchar()与putchar() getchar() getchar()的一个重要机制getchar()与scanf()区别putchar()实例

1.清空缓冲区

2.字符串中有空格

getchar()与putchar()getchar()getchar()的一个重要机制getchar()与scanf()区别 putchar() 实例1.清空缓冲区2.字符串中有空格getchar()与putchar()getchar与putchar其实最基本的作用就是用getchar读取一个字符,再用putchar输出一个字符

基本用法:

#include

int main(){char c = 0;c = getchar();putchar(c);return 0;}

运行结果:

输入一个a,然后再打印a这里getchar和putchar与scanf和printf的作用基本一致,只不过getchar,putchar只对字符类型操作,而scanf,printf对指定的类型进行操作getchar()

getchar的定义:

int getchar(void)返回类型是int值,所以返回的是字符的ASCII码参数列表中是void,所以不必在括号中传参数如果getchar读取失败,就会返回EOFgetchar()的一个重要机制在getchar函数的作用与键盘间,存在一个输入缓冲区,从键盘输入的内容会存在这个缓冲中,接下来getchar函数会从缓冲区中取走内容

因为getchar是对于字符进行操作,所以每次执行getchar都会取走输入缓冲区中一个字符

并且getchar还会取走回车也就是\n与空格我们用下面的代码进行对输入缓冲区机制的测试:int main(){char ch = 0;while ((ch = getchar()) != EOF){putchar(ch);}return 0;}当输入一个字符a时,同时我们会按下回车,此时输入缓冲区中就有两个字符:a\n

首先,getchar()会先取走字符a,然后通过putchar打印出来

接着循环,getchar()取走字符\n,然后通过putchar打印出来,所以在输出中光标不在输出的a的后面,而在a的下一行

接着,输入缓冲区中以无内容,getchar()就会读到EOF,退出循环还可以用以下代码更进一步验证getchar()

对于回车的读取:

int main(){int i = 0;char ch = 0;while ((ch = getchar()) != EOF){putchar(ch);i++;}printf("%d", i);return 0;}输入字符a和b,这里实际上是输入a后,按一次回车,输入b后,按一次回车,所以输入缓冲区中的内容为:a\nb\n,所以getchar()会读取四次,所以i的值为会是4

getchar()与scanf()区别*getchar与scanf的主要区别是getchar能读取输入缓冲区中的一切字符类型,包括空格与回车,而scanf()不能读取空格与回车putchar()

putchar的定义:

int putchar ( int character );传的参数是要输出的字符变量putchar的用法与printf("%c",character)一致,都是输出一个字符实例

1.清空缓冲区

下面一段把代码是输入一段密码,并且还要用getchar()接受是否确认密码的选项:int main(){char password[20] = { 0 };int ch = 0;printf("输入密码\n");scanf("%s", password);printf("请确认密码(Y/N):");ch = getchar();if (ch == 'Y'){printf("成功\n");}else{printf("失败\n");}return 0;}我们输入一端密码后,还未输入Y或N,代码就自动打印“失败”并退出运行

这其实还是scamf无法读取回车在作祟

当我们输入1234567后,此时在输入缓冲区中其实存的是:1234567\n

scanf("%s", password);语句读取字符串,因为它无法读取\n所以此时scanf只会读取走1234567,在输入缓冲区中还有\n

所以在之后的ch = getchar();中,就会读取\n,不等于Y,所以会打印失败所以,要把缓冲中的\n 消化掉,也就是清空缓冲区只要,再写一个getchar()语句,将\n读取走,就可以了

代码如下:

int main(){char password[20] = { 0 };int ch = 0;printf("输入密码\n");scanf("%s", password);printf("请确认密码(Y/N):");getchar(); //清空缓冲区ch = getchar();if (ch == 'Y'){printf("成功\n");}else{printf("失败\n");}return 0;}运行成功

2.字符串中有空格

以下代码是输入一个字符串再输出:int main(){char str[20] = { 0 };scanf("%s", str);printf("%s", str);return 0;}如果输入的字符串是连续的,也就是没有空格的,此代码正常运行

如果输入的字符串是有字符的,就会出现错误

错误的原因还是scanf无法读取缓冲区中的空格,所以接下来要使用getchar去读取字符串因为输入的一段字符串一定会是以\n为结尾

所以在前面的while ((ch = getchar()) != 'EOF)改成while ((ch = getchar()) != '\n')即可,只要不遇到\n就一直读取下去

代码如下:

int main(){char str[20] = { 0 };char ch = 0;while ((ch = getchar()) != '\n'){putchar(ch);}return 0;}

运行结果:

到此这篇关于C语言中getchar()与putchar()函数详解的文章就介绍到这了,更多相关C语言 getchar()与putchar()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:C语言中getchar( ) 函数使用详解C语言中getchar()函数的用法小结C语言库函数getchar()新见解C语言超详细讲解getchar函数的使用C语言中getchar函数详解看这一篇就够了(函数功能、使用、返回值)

相关文章