scanf()、getchar()出现异常情况,scanf()遇到‘\n‘就停止读取,getchar()处理缓存区多余的字符

int putchar(int char)

把参数 char 指定的字符(一个无符号字符)写入到标准输出 stdout 中。

int getchar(void)

从标准输入 stdin 获取一个字符(一个无符号字符)。这等同于 getc 带有 stdin 作为参数。

//EOF = end of file (文件的结束标志)
//程序的意义:键盘输入一个字符,只要不是EOF就持续循环输入、打印字符。

int main()
{
    int ch = 0;
    // EOF = -1
    while ((ch = getchar()) != EOF)
    {
        putchar(ch);
    }

    return 0;
}

// 输入EOF,仍然打印EOF,继续循环
// 输入“ ctrl+z ”,即终止循环

在这里插入图片描述

// scanf()遇到'\n'就停止读取
// getchar()每次只能读取一个字符

int main()
{
    int ch = 0;
    char password[20] = { 0 };

    cout << "请输入密码:";
    scanf("%s", password);

    cout << "请确认(Y/N):";
    ch = getchar();

    if ('Y' == ch)
        printf("确认成功\n");
    else
        printf("放弃确认\n");
    return 0;
}

/*
这段程序输入字符串“123”后直接弹出“放弃确认”
因为输入缓存区存入了“123\n”,scanf()读取了“123”后停止,
getchar()接着读取“\n”,所以后续不满足('Y'==ch),直接输出“放弃确认”。
*/
int main()
{
    int ch = 0;
    char password[20] = { 0 };

    cout << "请输入密码:";
    scanf("%s", password);


    // 处理缓存区多余的字符
    while (getchar() != '\n')
        ;

    cout << "请确认(Y/N):";
    ch = getchar();

    if ('Y' == ch)
        printf("确认成功\n");
    else
        printf("放弃确认\n");

    cout << endl << "已确认的密码为:" << password << endl;
    return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值