|
20鱼币
代码:
#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部分后加入 而第二部分不加入也可以正常运行?
因为'\n'也是个字符,所以scanf("%c", &k);前面加上fflush(stdin);清空输入缓存,不然scanf("%c", &k);接收'\n',
下面scanf("%x", &c);接收的是十六进制数(0-9 a-f),不会接收\n',所以不用管'\n'
|
最佳答案
查看完整内容
因为'\n'也是个字符,所以scanf("%c", &k);前面加上fflush(stdin);清空输入缓存,不然scanf("%c", &k);接收'\n',
下面scanf("%x", &c);接收的是十六进制数(0-9 a-f),不会接收\n',所以不用管'\n'
|