在C语言中,scanf("%c", &c)
可以清除之前scanf
读取的int
类型的标准输入缓冲区中的\n
,这是由于输入缓冲区中的换行符\n
留在缓冲区中并在下一个scanf
调用时被读取。当你使用scanf
函数读取一个字符(%c
)时,它会读取下一个字符,包括空白字符(空格、制表符、换行符等)。如果之前有一个scanf
读取了一个整数(或其他类型),并且输入结束时用户按下了Enter键,换行符\n
就会留在输入缓冲区中。现在,如果接着调用scanf("%c", &c)
,它会读取缓冲区中的下一个字符,即\n
。因此,它看起来好像清除了之前的\n
。实际上,它只是读取了缓冲区中的下一个字符,这正是%c
的行为。以下是一个简单的例子,说明了这个过程:
#include <stdio.h>
int main() {
int num;
char ch;
printf("Enter an integer: ");
scanf("%d", &num); // 用户输入整数,按下Enter键,缓冲区中留下了\n
// 使用 %*c 跳过缓冲区中的换行符
scanf("%*c"); // 这里 %*c 读取并丢弃一个字符(换行符)
printf("Enter a character: ");
scanf("%c", &ch); // 读取缓冲区中的下一个字符,即清除之前留下的\n
printf("Entered integer: %d\n", num);
printf("Entered character: %c\n", ch);
return 0;
}
在这个例子中,%*c
用于读取并丢弃一个字符,这里的目的是跳过缓冲区中的换行符。然后,接着调用scanf("%c", &ch)
来读取用户输入的字符。