不终止的程序

时间:2016-03-08 05:38:03

标签: c arrays while-loop

我编写了一个程序,它应该采用一组数字并找到最小数字的数组索引。但是,当我输入数字之间的空格然后按回车键时,程序会继续运行。可能是什么原因?这是代码:

#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循环并使用&#34; break&#34;语句,但输出给出了除第一个数组之外的数组中的所有数字。这是代码:

#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;
}

提前感谢您的帮助!

2 个答案:

答案 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;
    }
 }

答案 1 :(得分:0)

试试这个:

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