@TOC
scanf("%d",&a)、scanf("%s",&a)等不能接受空格、Tab、回车等。对于末位回车符,会把其保存在输入缓冲区,保存在输入缓冲区中的末位回车符能否为下次scanf()所接收。要视scanf()中输入类型决定。仅字符型变量scanf("%c",&a)可以接收回车。
实验对比结果如下:
1.scanf()接收%d类型的数据
上图中,吸收首次输入后剩余的回车,使用scanf函数,接收%d类型。scanf()在接收%d类型数据时,遇到回车直接认为本次输入结束。因为缓冲区里除了回车已经没有其他内容。所以b的并未改变。
scanf() 接收%c型的数据
使用scanf("%c",&b)时,同样输入缓冲区中仅剩有一个回车,但此时可以将’\n’赋值给b,并在检测点2下方打印了回车
此时,scanf("%c",&b)的效果同getchar()
代码
.
// An highlighted block
#include "stdio.h"
void main()
{
char a,b='A',c;
scanf("%c",&a);
printf("检测点1:%c\n",a);
if(a=='Y')
printf("首次接收正常\n");
else
printf("首次接收失败\n");
// b=getchar();
scanf("%c",&b);
printf("检测点2:%c\n",b);
scanf("%c",&c);
printf("检测点3:%c\n",c);
if(c=='Y')
printf("第二次接收正常\n");
else
printf("第二次接收失败\n");
}
注:头一次写,版式和内容还有欠缺,各位见谅!!!有问题或建议欢迎留言评论哈