2016-12-01 3 views
1

У меня есть функция ввода для массива, который инициализирован, чтобы содержать 50 элементов. Цикл, который собирает входные данные от пользователя прекращается, как только значение «-1» вводится и 50 записей вводятся вКак получить функцию ввода для завершения массива на основе определенного ввода и размера?

Для того, чтобы правильно протестировать программу у меня есть эти два случая: тестовые.

  1. Введено менее 50 значений, а набор данных заканчивается на «-1».
  2. Введено 50 значений, а набор данных не заканчивается символом «-1».

Я могу получить 1-й тестовый пример, но для второго тестового примера он, похоже, переходит в бесконечный цикл. Как мне изменить мою функцию ввода для работы для второго тестового примера?

Основные функции:

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

Любая помощь приветствуется! Спасибо!

ответ

3

Гораздо проще и более удобным для чтения, чтобы просто делать-цикл и выход, если маркер найден:

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

Моя единственная проблема в том, что я не могу использовать заявление перерыв, так что я мог просто заменить, что установив i = SIZE? –

+0

Теперь он работает, спасибо! –