scanf("%c")和getchar

1.scanf("%c")

scanf等待回车输入后,准确说是'\n'输入后,从缓冲区中读取数据,称为等待回车输入;

这也是我们很多次输入数据要按回车键的原因。

scanf读取数据时,简单来说分为两种

一种是读取字符scanf("%c"),由于tab,空格,和回车都有自己对应的ascaii码,tab为9,空格为32,回车为10,

所以输入数据时要谨防这些间隔符被当成字符输入;

一种是输入字符串,整形,浮点型等数据,这些数据输入时,输入到缓冲区中的tab,空格和回车会被当成分隔符;

这种方式读取数据,最后会在缓冲区留下一个'\n',依然可以用scanf("%c"或getchar读取,而其他的分隔符就真的被当作分隔符过滤掉了;

#include "stdio.h"  
int main(void)   
{  
    int n0;
    double n1;
    char n2[10];  
    char n3;  
    scanf("%d",&n0);
    scanf("%lf",&n1);
    scanf("%s",n2);  
    scanf("%c",&n3);  
    printf("*%d*,*%lf*,*%s*,*%d*",n0,n1,n2,n3);  
    return 0;  
}  
//输入
1
1.1
hello回车
//结果
    缓冲区:1'\n'1.1'\n'hello'\n'
    scanf("%d",&n0);//get 1
    scanf("%lf",&n1);//'\n'过滤,'get 1.1
    scanf("%s",n2);  //'\n'过滤,get hello
    scanf("%c",&n3); //get'\n'


2.getchar

getchar等待回车输入后,准确说是'\n'输入后,从缓冲区中读取数据,称为等待回车输入;(与scanf相同)

但是getchar每次读取数据都是从缓冲区中读取,而不是从键盘读取,依次输入的数据可以理解为以队列的形式输入到缓冲区,

队头输入,队尾读取;

<pre name="code" class="cpp">#include "stdio.h"  
#include "stdlib.h"  
int main(void)  
{  
    char c;  
    for(;(c=getchar())!='a';)  
        printf("%c",c);  
    getchar();  
    c=getchar();  
    printf("%c",c);   
    return 0;  
} 
//输入csdn然后回车
    char c;
    for(;(c=getchar())!='a';)//输入csdn'\n'
        printf("%c",c);//依次从缓冲取获取csdn'\n,输出csdn'\n'并等待程序输入  
    getchar();  //程序未到此处
    c=getchar();  //程序未到此处
    printf("%c",c);  
    结果:
    csdn
    光标等待输入
//输入csdna然后回车
    char c;  
    for(;(c=getchar())!='a';)  //输入csdna'\n'
        printf("%c",c);//依次从缓冲取获取csdna,输出 csdn,不输出a,跳出循环
    getchar();  //获取'\n'
    c=getchar();  //等待输入
    printf("%c",c);  
    system("pause");  
    return 0;
    结果:csdn光标等待c输入


 




  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值