#include<stdio.h>
void main()
{
char a,b;
printf("enter a,b\n");
scanf("%c %c",&a,&b);
printf("a is %c,b is %c,a,b");
}
1.两个格式说明符之间的空格告诉计算机做什么?2.在从那里读取之前,是否像 %d 之类的格式说明符而不是 %c 清理输入缓冲区?
#include<stdio.h>
void main()
{
char a,b;
printf("enter a,b\n");
scanf("%c %c",&a,&b);
printf("a is %c,b is %c,a,b");
}
1.两个格式说明符之间的空格告诉计算机做什么?2.在从那里读取之前,是否像 %d 之类的格式说明符而不是 %c 清理输入缓冲区?
1.两个格式说明符之间的空格告诉计算机做什么?
格式字符串中的空白告诉scanf
读取(并丢弃)空白字符,直到第一个非空白字符(仍然未读取)1。所以
scanf("%c %c",&a,&b);
将单个字符读入a
(空格与否),然后跳过任何空格并将下一个非空格字符读入b
.
2.在从那里读取之前,是否像 %d 之类的格式说明符而不是 %c 清理输入缓冲区?
不太清楚你在这里的意思 -d
将跳过任何前导空格并从第一个非空格字符开始读取,c
将读取下一个字符,无论它是否是空格。如果指令失败,它们既不会刷新输入流,也不会写入目标变量(例如,如果输入流中的下一个非空白字符不是数字,则d
指令失败,并且对应的参数指令不会更新)。
维基百科说
空白:任何空白字符都会触发对零个或多个空白字符的扫描。空白字符的数量和类型不需要在任一方向上匹配。
"%d" 将跳过空格,直到找到一个整数。
"%c" 读取单个字符(空格是一个字符,所以它不会跳过)。