求助

鲁啸 2020-01-19 01:57:31
double get_input(void)
{
double a;

while(scanf("%lf",&a)!=1)
{
printf("\nEnter a number\n");
}
return a;
}

陷入循环...
但是添加

double get_input(void)
{
double a;
char ch;
while(scanf("%lf",&a)!=1)
{
while ((ch=getchar())!='\n')
putchar(ch);
printf("\nEnter a number\n");
}
return a;
}

成功运行
为什麽?
...全文
200 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
鲁啸 2020-01-21
  • 打赏
  • 举报
回复
引用 1 楼 寻开心 的回复:
你到你要闹哪样啊?
double get_input(void)
{
double a;
while(scanf("%lf",&a)!=1) // 输入的是double内容,那么while循环体不执行; 如果不是double,键盘缓冲区的内容并没有变化,还是原来的内容,所以一直在这儿死循环
{
printf("\nEnter a number\n");
}
return a;
}

陷入循环...
但是添加

double get_input(void)
{
double a;
char ch;
while(scanf("%lf",&a)!=1) { // 输入的不是一个double类型数据, 会进入这个while循环体
while ((ch=getchar())!='\n') // 把缓冲区的字符一个一个的提取出来, 包括最后的回车符, 也就是放弃了这一整行的数据了
putchar(ch);
printf("\nEnter a number\n");
}
return a;
}
后面的这个函数,因为可以把键盘缓冲区清空,让用户重新输入数据,所以可以继续进行下去
前面的那个函数,因为没有清理缓冲区, 所以读取double的条件始终无法达到

如果只是这个目的。 循环体里面用一个fflush(stdin)就好了或者gets函数也可以解决。
谢谢🙏
寻开心 2020-01-19
  • 打赏
  • 举报
回复
你到你要闹哪样啊?
double get_input(void)
{
double a;
while(scanf("%lf",&a)!=1) // 输入的是double内容,那么while循环体不执行; 如果不是double,键盘缓冲区的内容并没有变化,还是原来的内容,所以一直在这儿死循环
{
printf("\nEnter a number\n");
}
return a;
}

陷入循环...
但是添加

double get_input(void)
{
double a;
char ch;
while(scanf("%lf",&a)!=1) { // 输入的不是一个double类型数据, 会进入这个while循环体
while ((ch=getchar())!='\n') // 把缓冲区的字符一个一个的提取出来, 包括最后的回车符, 也就是放弃了这一整行的数据了
putchar(ch);
printf("\nEnter a number\n");
}
return a;
}
后面的这个函数,因为可以把键盘缓冲区清空,让用户重新输入数据,所以可以继续进行下去
前面的那个函数,因为没有清理缓冲区, 所以读取double的条件始终无法达到

如果只是这个目的。 循环体里面用一个fflush(stdin)就好了或者gets函数也可以解决。

69,431

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧