如何根据特定的输入和大小获取数组的输入函数?

时间:2016-12-01 19:40:12

标签: c arrays input infinite-loop

我有一个数组的输入函数,初始化为包含50个元素。一旦输入值“-1”并输入50个条目,正在从用户收集输入的循环终止。

为了正确测试程序,我有以下两个测试用例:

  1. 输入的值少于50,数据集以“-1”结尾。
  2. 输入了50个值,数据集不以“-1”结尾。
  3. 我能够让第一个测试用例工作,但对于第二个测试用例,它似乎进入了一个无限循环。如何修改输入函数以适用于第二个测试用例?

    主要功能:

    #include<stdio.h>
    #include<stdlib.h>
    //Global Declarations
    #define SIZE 50
    
    int getFuelRange();
    int getStartMile();
    void getMileMarkers(int markers[], int*);
    void bubbleSort(int markers[], int);
    int searchArray(int markers[], int, int);
    int calcDifference(int markers[], int, int, int);
    int findSize(int markers[]);
    //void displayResults();
    
    int main()
    {
      //Local Declarations
      int fuelRange;
      int startMile;
      int markers[SIZE];
      int i = 0;
      int points;
      int size;
    
      //Executable Statements
      fuelRange = getFuelRange();
      startMile = getStartMile();
      getMileMarkers(&markers[i], &size);
      //Diagnostics
      //printf("\nFuel Range: %d Start Mile: %d\n", fuelRange, startMile);
      //printf("\nSize: %d \n", size);
      points = calcDifference(&markers[i], fuelRange, startMile, size);
    
    
      //Diagnostics
      //printf("\nFuel Range: %d Start Mile: %d\n", fuelRange, startMile);
      printf("Points: %d \n", points);
    
      return(0);
    }
    

    输入功能:

    void getMileMarkers(int markers[], int *size)
    {
      //LOCAL DECLARATIONS
      int i = -1; //counter
      //EXECUTABLE STATEMENTS
      printf("Enter mile marker positions: ");
      do
      {
        i++;
        scanf("%d", &markers[i]);
        //Diagnostic Print
        printf("\n%d", markers[i]);
      }while(markers[i] != -1 && i < SIZE);
      (*size) = i;
    }
    

    任何帮助表示赞赏!谢谢!

1 个答案:

答案 0 :(得分:3)

如果找到标记,只需要一个do-loop并退出就更容易和更具可读性:

for ( i=0; i < SIZE; i++ ) {
   scanf("%d", &markers[i]);
   if ( markers[i] == -1 ) {
      break;
   }
}