×

C语言 C语言学习随笔 初始C语言 清理输入缓冲区

C语言学习随笔:清理输入缓冲区(以一个密码输入程序为例)

一哥 一哥 发表于2022-10-09 22:43:58 浏览901 评论0

抢沙发发表评论

程序要求:

1、输入一组字符串作为密码,然后输入“Y”则输出“确认成功”,输入“N”刚输出“确认失败”

2、当输入完字符串后,要对输入缓冲区进行清理。


程序代码:

//头文件
#include <stdio.h>

//主函数
int main()
{
    char password[20] = { 0 };  //定义一个char类型数组,用于存放密码
    printf("请输入密码:>");
    scanf("%s", password);  //数组名本身就是一个地址,因此无需取地址符“&”
    while (1)
    {
        printf("请确认密码Y/N:>");
    
        /*清空输入缓冲区*/
        int tmp = 0;
        while ( (tmp = getchar()) != '\n');
        /*清空输入缓冲区*/
    
        int ch = getchar();
        if ( 'Y' == ch || 'y' == ch)
        {
            printf("确认成功!");
            break;
        }
        else if ('N' == ch || 'n' == ch)
        {
            printf("确认失败!");
            break;
        }
        else
        {
            printf("输入错误,请重新输入!\n");
        }
    }
    return 0;
}


程序解析:

1、因为scanf取密码时不会取走'\n'和空格后的字符,如果不对输入缓冲区进行清理,后面的确认密码部分就会自动读取输入缓冲区内的'\n'或空格。因此这里需要使用到getchar对缓冲区进行清理。

2、由于C语言定义了getchar为int类型,因此这里定义清理缓冲区用的变量tmp为int类型。

3、使用一个while循环,判断部分设置为“ ( tmp = getchar() ) != '\n'  ”。getchar读取到的值赋给tmp,直到读取到'\n'时,退出while循环。这样就可以达到对缓冲区多余字符的清理。不影响下面确认密码部分变量ch的getchar读取。

少长咸集

群贤毕至

访客