2016-03-08 4 views
0

Я написал программу, которая должна взять массив чисел и найти индекс массива наименьшего числа. Однако, когда я набираю числа с пробелами между ними и затем нажимаю Enter, программа продолжает работать. Что может быть причиной? Вот код:программа, которая не завершается

#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

Редактировать

вы настроите свой 'N' с 1, однако массивы начинаются с нулевого индекса Вот почему он пропускает первый элемент,

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

Условие должно быть 'if (array [n] mangusta

+0

Спасибо, теперь цикл завершается. Однако выход программы неверен. Я попытался напечатать числа, которые хранятся в массиве, и они оказались либо 0.000000, либо случайным числом (мусором). В чем проблема? Это в цикле while? – baur

+0

@mangusta вы правы, –

0

попробовать это одно:

for(n=1; n < size; n++){ 
    if(array[n]<array[minIndex]){ 
     minIndex=n; 
    } 
} 
Смежные вопросы