C语言 getchar()用法,缓冲区,密码中有空格,打印数字字符

C语言中的getchar()

1.getchr功能简单介绍

  getchar();获取一个字符,获取成功得到字符,获取失败得到EOF1

  有获取就有输出,putchar() 输出一个字符。

2getchar的返回类型是 i n t \color{red}{int} int.

  解释:1.getchar()读取的是字符,而字符本质上是以ASCII码值的形式存在的,而ASCII码值是整形,所以返回类型是 i n t \color{red}{int} int

2.getchar读取地时候不一定返回的是ASCII码值,有可能返回EOF,而EOF本质上是(-1),(-1)不是ASCII码值,就是一个单纯的整数,所以返回为整形。

3.getchar缓冲区

getchar缓冲区理解

  当我们从scanf输入数据时(数据在这里起名密码),输入完数据按下回车,会在缓冲区打印(\n),使得第一个getchar读取到的是(\n),只有再写一个getchar,才能读到接下来输入地数据。
如若还是不理解,接下来我们用代码讲解一遍

例题:用getchar读取输入的密码,当密码中有空格地时候。输入完密码后(Y/N)来确定密码即可。
代码1

#include<stdio.h>
int main()
{
    char password[20]={0}; //创建密码
    printf("请输入密码:>"); 
    printf("请确认密码(Y/N)");
    int ah=getchar(); //清理缓冲区 第一个getchar清理缓冲区中的\n
    int ch=getchar(); //第二个getchar 读取(Y/N)
    if(ch=='Y')            //简单地选择语句,如若不懂,请观看
                           //我的选择语句这块的博客
    {
        printf("确认成功!\n");
    }
    else if(ch=='N')
    {
        printf("确认失败\n");
    }
    else
    {
        printf("请重新确认!\n");
    }
    return 0
}

先声明一下,以上代码只适用于密码中没有空格的
   仔细研究这块的代码,发现逻辑什么的都没有问题,但是我们 \color{blue}{仔细研究这块的代码,发现逻辑什么的都没有问题,但是我们} 仔细研究这块的代码,发现逻辑什么的都没有问题,但是我们 仔细看题目,密码中是有空格的 \color{red}{仔细看题目,密码中是有空格的} 仔细看题目,密码中是有空格的 而且没有说密码中有多少空格,所以我们换一个思路,改进一下代码 \color{blue}{而且没有说密码中有多少空格,所以我们换一个思路,改进一下代码} 而且没有说密码中有多少空格,所以我们换一个思路,改进一下代码

代码改进版

#include<stdio.h>
int main()
{
    char password[20]={0}; //创建密码
    printf("请输入密码:>"); 
    printf("请确认密码(Y/N)");
   int tmp=0;
   while((tmp=getchar()!='\n'))
   {
    ;
   }
    int ch=getchar(); //第二个getchar 读取(Y/N)
    if(ch=='Y')            //简单地选择语句,如若不懂,请观看
                           //我的选择语句这块的博客
    {
        printf("确认成功!\n");
    }
    else if(ch=='N')
    {
        printf("确认失败\n");
    }
    else
    {
        printf("请重新确认!\n");
    }
    return 0
}

改进思路:我们无法得知密码中设置了多少个空格,但我们知道,getchar()最会读到 \n,所以便有了以上的while()循环。

4.最后的小练习,只打印数字字符(先自己想,不会在看代码)

#include<stdio.h>
int main()
{
     int ch=0;
     while((ch=getchar()!)=EOF)
     {
        if(ch<'0'||ch>'9')
        continue;
        putchar(ch);
    }
        return 0;
}

学的不是技术,更是梦想


  1. EOF本质上是-1,在控制面版按下 ctrl+Z getchar读到EOF! ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君生我老

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值