getchar()gets() scanf()案例详解

本片主要参考的博客链接

scanf()、getchar()、gets()的区别

读取字符串时:
scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);空格也会残留在缓冲区中;自动将 字符串结束符**’\0**'送入数组中

getchar()以Enter结束输入,也不会舍弃最后的回车符;

gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!

scanf读取字符串问题

以空格结束一次输入
在这里插入图片描述分析原因:scanf()遇到空格结束一次读取

在这里插入图片描述
分析原因:
到此程序执行完毕,不会执行第二次的读取操作!这个问题的原因跟问题一类似,第一次输入Hello world!后,字符串Hello world!都会被读到输入缓冲区中,而scanf()函数取数据是遇到回车、空格、TAB就会停止,也就是第一个scanf()会取出"Hello", 而"world!"还在缓冲区中,这样第二个scanf会直接取出这些数据,而不会等待从终端输入。

以回车结束一次输入
在这里插入图片描述
分析原因:以回车结束一次输入

回车符残留在缓冲区中
在这里插入图片描述
分析原因:回车符会留在缓冲区,所以第二个scanf()直接读取缓冲区中的回车符,而不等待新的输入

空格也会残留在缓冲区中
在这里插入图片描述

scanf读取字符

回车残留在缓冲区中
在这里插入图片描述

分析原因:
程序的输入都建有一个缓冲区,scanf(),cin()函数都不是直接从键盘读取数据而是从缓冲区读取,第一次从键盘输入
a空格b回车,由于格式scanf("%c %c",&str1,&str2); 两个%c之间有空格所以键盘输入的空格不作为字符被读取;scanf函数读取a b后回车残留在缓冲区中,当再次从键盘输入字符a b时,scanf()函数读从缓冲区读取回车 和a的值

空格会作为字符被scanf()函数读取
在这里插入图片描述

getchar()与putchar()

getchar()与putchar()用法:
只能输入或输出一个字符

char ch;
ch=getchar();
putchar(ch);

getchar()读取字符时回车也会留在缓冲区
在这里插入图片描述
空格 回车都会作为字符被getchar()读入
在这里插入图片描述
分析原因
a空格b空格c回车d回车一共8个字符

gets()与puts()

gets()用法:
gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!
在这里插入图片描述

回车键在不同的函数下读取的值不同

回车,ASCII码13
换行,ASCII码10
空格,ASCII码32
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值