2016-03-08 125 views
0

我寫了一個程序,應該採取數字數組和找到最小數量的數組索引。但是,當我輸入空格之間的數字然後按下回車鍵時,程序將繼續運行。原因是什麼?這裏是代碼:程序,不終止

#include<stdio.h> 

//read numbers to an array 
//find minimum 
//print the index of minimum 

double findMinimum(int size,double array[]){ 
int n; 
int minIndex=0; 
for(n=1;n<size;size++){ 
    if(array[n]<array[n-1]){ 
     minIndex=n; 
    } 
} 
return minIndex; 
} 

int main(){ 
setvbuf(stdout,NULL,_IONBF,0); 

int size=0; 
double inArray[size]; 

printf("Enter an array of numbers:"); 

int k=0; 
char c; 

while(c!='\n'){ 
    c=getchar(); 

    if(c=='\n'){ 
     break; 
    } 

    scanf("%lf",&inArray[k]); 
    k++; 
    size++; 

    }; 

int minIndex=0; 
minIndex=findMinimum(size,inArray); 
printf("The index of minimum number is %i",minIndex); 

return 0; 
} 

我也採取了掃描數字到數組的代碼的一部分。我試圖改變while循環並使用「break」語句,但輸出給出了數組中除第一個外的所有數字。這裏是代碼:

#include<stdio.h> 

//read numbers to an array 

int main(){ 
setvbuf(stdout,NULL,_IONBF,0); 

int size=0; 
double inArray[size]; 

printf("Enter an array of numbers ending with question mark:\n"); 

int k=0; 
char c; 

while(1){ 
    c=getchar(); 

    if(c=='?'){ 
     break; 
    } 

    scanf("%lf",&inArray[k]); 
    k++; 
    size++; 
}; 

int n; 
for(n=0;n<size;n++){ 
    printf("%f\n",inArray[n]); 
} 

return 0; 
} 

感謝您的幫助提前!

回答

3
for(n=1;n<size;size++){ 
    if(array[n]<array[n-1]){ 
     minIndex=n; 
    } 
} 

在你的代碼中的問題是你增加size,這就是爲什麼你的循環沒有終止。增加n

編輯

你有1初始化你的 'N',但是陣列將從零開始指數這就是爲什麼它錯過了第一要素,

for(n=0;n<size;n++){ 
    if(array[n]<array[minIndex]){ 
     minIndex=n; 
    } 
} 
+0

條件應該是'如果(陣列[N] <陣列[minIndex])' – mangusta

+0

謝謝,現在的循環結束。但是,該程序的輸出是錯誤的。我試圖打印存儲在數組中的數字,結果是0.000000或隨機數(垃圾)。可能是什麼問題?它是在while循環嗎? – baur

+0

@mangusta你是對的, –

0

試試這個:

for(n=1; n < size; n++){ 
    if(array[n]<array[minIndex]){ 
     minIndex=n; 
    } 
}