#include <stdio.h>
void main(){
int a[3] ;
//char c;
int i,num,mid,flag,legal,m,n,top,bott;
int sign = 0;//表示沒有找到這位數
num = 0;
printf("請輸入陣列:");
scanf("%d",&a[0]);
i =1;
while(i < 3){
scanf("%d",&a[i]);
if(a[i] < a[i-1]){
printf("\n輸入的數小于上一個數,請重新輸入大于上一個數的值:");
}
else
i++;
}
printf("輸入的陣列為:");
for(i = 0; i < 3; i++){
printf("%d ",a[i]);
}
printf("\n");
flag = 1;
// mid = 15/2;
mid = 0;
top = 0;
bott = 14;
legal = 0;
while(flag){
char c;
printf("請輸入一個查找的數:");
scanf("%d",&num);
m = (num < a[0]);
n=(num > a[2]);
if((num < a[0]) || (num > a[2]))//不在這部分數的范圍之內
legal = -1;
sign = 0;
top =0 ;
bott = 3;
while(sign == 0 && (top <= bott)){
mid = (top + bott)/2;
if(num > a[mid])
top = mid + 1;
else if(num < a[mid])
bott = mid - 1;
else{
printf("%d是陣列中的第%d個元素的值",num,mid);
break;
sign = 1;
}
}
if(!sign || legal == -1)
printf("無此數,\n");
//char c;
printf("是否重新輸入(Y/N)");
scanf("%c",&c);
if(c == 'Y')
flag = 1;
else
flag = 0;
}
}
為什么我每次執行到“是否重新輸入”,然后就不能輸入,直接跳到flag = 0,然后退出回圈?????
uj5u.com熱心網友回復:
求回復呀
uj5u.com熱心網友回復:
printf("是否重新輸入(Y/N)");fflush(stdin); //清空鍵盤輸入緩沖區試試
scanf("%c",&c);
uj5u.com熱心網友回復:
你把char c給屏蔽了啊uj5u.com熱心網友回復:
我試過了,不行
uj5u.com熱心網友回復:
我也是這樣認為的,怎么解決呢
uj5u.com熱心網友回復:
我把void main()改成 int main() 在DEVC++上編譯了下 沒出現你說的那個問題,還有 你的演算法有問題uj5u.com熱心網友回復:
if(!sign || legal == -1)printf("無此數,\n");這個判斷好像出問題了 無論如何都會顯示無此數
uj5u.com熱心網友回復:
printf("%d是陣列中的第%d個元素的值\n",num,mid+1);sign = 1;
break;
換成這樣 然后void main()改成 int main()
printf("%d是陣列中的第%d個元素的值\n",num,mid);改成 printf("%d是陣列中的第%d個元素的值\n",num,mid+1);
就OK了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/77380.html
標籤:基礎類
上一篇:c++的初學者
下一篇:代碼求修改,對檔案的操作
