-1
#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 清理输入缓冲区?

4

2 回答 2

2

1.两个格式说明符之间的空格告诉计算机做什么?

格式字符串中的空白告诉scanf读取(并丢弃)空白字符,直到第一个非空白字符(仍然未读取)1。所以

scanf("%c %c",&a,&b);

将单个字符读入a(空格与否),然后跳过任何空格并将下一个非空格字符读入b.

2.在从那里读取之前,是否像 %d 之类的格式说明符而不是 %c 清理输入缓冲区?

不太清楚你在这里的意思 -d将跳过任何前导空格并从第一个非空格字符开始读取,c将读取下一个字符,无论它是否是空格。如果指令失败,它们既不会刷新输入流,也不会写入目标变量(例如,如果输入流中的下一个非空白字符不是数字,则d指令失败,并且对应的参数指令不会更新)。


  1. N1570,第 7.21.6.2 节,第 5 段:“由空白字符组成的指令通过读取输入直到第一个非空白字符(仍然未读取),或者直到没有更多字符可以被执行读。指令永远不会失败。”

于 2016-10-25T18:04:16.937 回答
0

维基百科

空白:任何空白字符都会触发对零个或多个空白字符的扫描。空白字符的数量和类型不需要在任一方向上匹配。

"%d" 将跳过空格,直到找到一个整数。

"%c" 读取单个字符(空格是一个字符,所以它不会跳过)。

于 2016-10-25T16:12:41.327 回答