c实现二分查找问题

_乔 2016-04-27 04:24:50
如果在是否继续后的输入语句中加一个空格,运行时就可以输入,但是不加空格就直接跳转到请输入数字的位置,请问是怎么回事呢

#include <stdio.h>
int main(){
int arr[15] = {3,6,9,14,19,47,49,55,62,91,124,234,398,576,999};
int num,top,bott,mid,flag = 1,loc,sign = 0;
char c;
while(flag){
printf("请输入要查找的数字:");
scanf("%d",&num);
top = 0;
bott = 14;
if(num < arr[top] || num > arr[bott])
loc = -1;
while(!sign && top <= bott){
mid = (top + bott) / 2;
if(num == arr[mid]){
loc = mid;
printf("%d在第%d位置上\n",num,loc + 1);
sign = 1;
}else if(num <= arr[mid]){
bott = mid - 1;
}else{
top = mid + 1;
}
}
if(!sign || loc == -1)
printf("找不到%d\n",num);

printf("是否继续Y/N:");
scanf("%c",&c);
if(c == 'N' || c == 'n')
flag = 0;
}
return 0;
}
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
_乔 2016-04-28
  • 打赏
  • 举报
回复
引用 楼主 u012197585 的回复:
不是太明白您提到的写法为什么要这样写呢
lm_whales 2016-04-27
  • 打赏
  • 举报
回复
scanf ("%c ") ;试试看
lm_whales 2016-04-27
  • 打赏
  • 举报
回复
scanf ("%c ",&c) ;试试看
小灸舞 版主 2016-04-27
  • 打赏
  • 举报
回复
因为%c会读取掉遗留的回车符.
举个例子:比如你输入5按下回车,此时输入缓冲区是5\n
scanf("%d",&num);仅仅是读取掉了5(此时输入缓冲区为\n)
等到执行到scanf("%c",&c);由于输入缓冲区不为空,所以scanf会直接读取遗留的回车符从而看起来像跳过了这句
解决方法:
scanf("%c",&c);前面加一句getchar();或者fflush(stdin);都行
赵4老师 2016-04-27
  • 打赏
  • 举报
回复
在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
//请今后要用
int c;
scanf("%c",&c);
//时,都改为
char s[2];
int c;
scanf("%1s",s);
c=s[0];

69,371

社区成员

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

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