鱼C论坛

 找回密码
 立即注册
查看: 2501|回复: 1

[已解决]scanf函数

[复制链接]
发表于 2022-4-17 16:13:49 | 显示全部楼层 |阅读模式
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部分后加入 而第二部分不加入也可以正常运行?

最佳答案
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'
  

最佳答案

查看完整内容

因为'\n'也是个字符,所以scanf("%c", &k);前面加上fflush(stdin);清空输入缓存,不然scanf("%c", &k);接收'\n', 下面scanf("%x", &c);接收的是十六进制数(0-9 a-f),不会接收\n',所以不用管'\n'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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'
  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 21:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表