|
|
1鱼币
- //1、无法正常退出, 会出现死循环
- #include <stdio.h>
- #define N 3
- int main()
- {
- int i, number, top, bott, mid, loca, a[N];
- // 循环变量, 待查数据, 起始数据, 最后数据,中间数据,待查数据是否在查区间内,查找数据数组
- int flag = 1; //控制主whlie循环
- int sign; //表示待查找数据是否找到
- char c; //控制退出
-
- printf("输入数据:\n");
- scanf("%d", &a[0]);
-
- i = 1;
- while(i < N)
- {
-
- scanf("%d", &a[i]);
-
- if(a[i] >= a[i-1])
- {
- i++;
- }
- else
- printf("请重新输入数据!!!\n");
-
- }
- printf("\n\n");
- for(i = 0; i < N; i++)
- {
- printf("%5d", a[i]);
- }
- printf("\n");
- while(flag)
- {
- printf("输入要查找的数据:\n");
- scanf("%d", &number);
- sign = 0;
- top = 0;
- bott = N - 1;
-
- if((number < a[0]) || (number > a[N - 1]))
- {
- loca = -1;
- }
- while((!sign) && top <= bott)
- {
- mid = (top + bott) / 2;
- if(number == a[mid])
- {
- loca = mid;
- printf("找到查找数据%d,位置%d\n", number, mid + 1);
- sign = 1;
- }
- else if(number < a[mid])
- {
- bott = mid - 1;
- }
- else
- {
- top = mid + 1;
- }
- }
- printf("sign=%d,flag=%d", sign, flag);
- if(!sign || loca == -1)
- {
- printf("未找到待查数据\n\n");
-
- }
-
- printf("是否继续查找(Y/N)?\n");
-
- scanf("%c", &c);
- if(c == 'n' || c == 'N')
- {
- flag = 0;
- }
- printf("flag = %d", flag);
-
- printf("\n");
- }
- return 0;
- }
复制代码 写了好几段代码都有这样的问题,可能是我要某个方面没有理解正确吧,大家帮忙看看,指点一下啊!!!被这个问题纠结了好几天了...
|
最佳答案
查看完整内容
这个和scanf("%d %d",&a,&b);的道理一样,这时候要输入两个数,这两个数的中间可以
是空格、‘\t’、'\n',反正要有一个。
scanf("%d", &number);输入数的时候还输入了一个'\n';这个数给了number,‘\n’留在了缓冲区。
scanf(" %c", &c);在%c前面加了一个空格,这个空格就对应了‘\n’.这样c可以正常接收数据,否则
c就直接接收'\n';
|