假如在能否继续后的输入语句中加一个空格,运行时就可以输入,但是不加空格就直接跳转到请输入数字的位置,问一下是怎么回事呢
#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);都行