一段代码带你理解输入缓冲区

2025博客之星年度评选已开启 10w+人浏览 1.2k人参与

本文将多次使用C语言中的scanf与getchar函数,带你充分理解输入缓冲区。

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main()
{

 /*
    int ch=getchar();
    //从输入缓冲区获取一个字符,返回值类型是int
    //错误输入时返回EOF(end of file)
    putchar(ch);
    //打印一个字符
    
    int ch=0;
    while ((ch = getchar()) != EOF)
    {
        putchar(ch);
    }
    */
    int num=0;
    char m ='\0';
    printf("1.实现只打印数字字符\n");
    printf("2.输入缓冲区示例\n");
    scanf("%d",&num);
    switch (num)
    {
        case 1:
            getchar();//清理输入缓冲区
            printf("功能1\n");

            while ((m = getchar()) != '\n')
            {
                if (m < '0' || m>'9')
                {
                    continue;
                }
                putchar(m);
            }
            break;
        case 2:
            getchar();
            printf("功能2\n");

            char password[20] = { 0 };
            printf("password:");
            scanf("%s", password);
            //数组名本身就是一个地址;在输入缓冲区不读空格,\n
            //getchar();//读取了输入缓冲区中的\n
            int ch = 0;
            while ((ch = getchar()) != '\n')
            {
                ;
            }//彻底清理输入缓冲区;只有空格前的内容被password保存
            printf("please confirm Y/N:");
            int ret = getchar();
            if ('Y' == ret || 'y' == ret)
            {
                printf("yes");
            }
            else
            {
                printf("no");
            }
            //没写48行代码时为什么功能不实现?
            //在scanf执行完后输入缓冲区余下\n,getchar不等待直接拿走并赋值给ret
            //进if语句判断后直接输出no
            break;
            default:printf("无效输入");

    }
    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值