假如在能否继续后的输入语句中加一个空格,运行时就可以输入,但是不加空格就直接跳转到请输入数字的位置,问一下是怎么回事呢
#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;
}
解决方案
10
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
//请今后要用
int c;
scanf("%c",&c);
//时,都改为
char s[2];
int c;
scanf("%1s",s);
c=s[0];
20
原因是%c会读取掉遗留的回车符.
举个例子:例如你输入5按下回车,此时输入缓冲区是5\n
scanf(“%d”,&num);仅仅是读取掉了5(此时输入缓冲区为\n)
等到执行到scanf(“%c”,&c);由于输入缓冲区不为空,所以scanf会直接读取遗留的回车符从而看起来像跳过了这句
解决方法:
scanf(“%c”,&c);前面加一句getchar();或fflush(stdin);都行
举个例子:例如你输入5按下回车,此时输入缓冲区是5\n
scanf(“%d”,&num);仅仅是读取掉了5(此时输入缓冲区为\n)
等到执行到scanf(“%c”,&c);由于输入缓冲区不为空,所以scanf会直接读取遗留的回车符从而看起来像跳过了这句
解决方法:
scanf(“%c”,&c);前面加一句getchar();或fflush(stdin);都行