为什么有些情况下scanf后面要跟一个getchar?

scanf是先往缓冲区中写入数据,然后在把数据从缓冲区中取出
getchar作用是从缓冲区中获取一个字符
putchar是向屏幕上输出一个字符

注意:这个问题只存在scanf用来输入字符时,因为int等数据类型不会接收空格的赋值操作,只有char类型才会接收空格的赋值操作

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void test()
{
	int num = 0;
	printf("请重新给num赋值:");
	scanf("%d", &num);
	printf("num的新值为:%d\n",num);
	char ch = 'a';
	printf("请重新给ch赋值: ");
	scanf("%c", &ch);
	printf("ch的新值为:%c\n",ch);
}
int main()
{
	test();
	return 0;
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

因此要解决上面的问题,需要在scanf语句后面天写一个getchar来获取\n,让用户能正常给ch赋值

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void test()
{
	int num = 0;
	printf("请重新给num赋值:");
	scanf("%d", &num);
	printf("num的新值为:%d\n",num);
	getchar();
	char ch = 'a';
	printf("请重新给ch赋值: ");
	scanf("%c", &ch);
	printf("ch的新值为:%c\n",ch);
}
int main()
{
	test();
	return 0;
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值