Weabu 发表于 2022-4-17 16:13:49

scanf函数

代码:
#include <stdio.h>
#include <math.h>

int main()
{

int i, c;
long long int result;
char k;

printf("请输入一个整数:");
scanf("%d", &i);

printf("%lld\n", result = pow(i, 2));

printf("请输入一个字符:");
scanf("%c", &k);

printf("请输入一个十六进制:");
scanf("%x", &c);
printf("%llx\n", result = pow(c, 2));

return 0;
}

输出:请输入一个整数:3
9
请输入一个字符:请输入一个十六进制

问1:为什么会跳过scanf("%c", &k);直接打印printf("请输入一个十六进制:");

解决方法: scanf("%d", &i);后加入
               while(getchar()'\n')清空键盘缓冲区

问2:为什么只需要在第一scanf部分后加入 而第二部分不加入也可以正常运行?

jhq999 发表于 2022-4-17 16:13:50

因为'\n'也是个字符,所以scanf("%c", &k);前面加上fflush(stdin);清空输入缓存,不然scanf("%c", &k);接收'\n',
下面scanf("%x", &c);接收的是十六进制数(0-9 a-f),不会接收\n',所以不用管'\n'
页: [1]
查看完整版本: scanf函数