Сбой чтения значений в массив - PullRequest
0 голосов
/ 26 сентября 2019

Я хочу использовать функцию для scanf до 10 значений для массива с размером 10, а также отслеживать количество значений в массиве, потому что оно понадобится мне позже для решения некоторых математических задач.о массиве, (максимальное значение, минимальное значение и т.просканирует до 10 значений в массив, если пользователь нажмет q (выйти), в то время как уже в опции ввода он будет возвращен в главное меню, где он может делать все что угодно.

V (просмотр) распечатывает массив для пользователя, чтобы он мог видеть, какие элементы находятся внутри.

C (вычислять) использует элементы внутри и nr элементов для вычисления наибольшегоэлемент значения, самый низкий.

1 Ответ

0 голосов
/ 27 сентября 2019

В вашем коде есть некоторые ошибки.Я постараюсь объяснить.Вы слишком много раз объявляли свои переменные.А поскольку у вас фиксированный цикл, вам не нужно считать измерения, вы всегда будете читать 10 измерений.

Ниже приведен код с некоторыми изменениями.Не стесняйтесь спрашивать об этом.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXIMUM_MEASURMENT 10

int enter(int MeasurmentData[])
{   
    char input[100];
    int nrMeasurement = 0;

    // reseting Measurment data
    for(int i=0;i<MAXIMUM_MEASURMENT;++i) MeasurmentData[i] = 0;

    for(int i=0;i<MAXIMUM_MEASURMENT;++i) 
    {
        scanf("%99s", input);
        if(strcmp(input, "q") == 0) {
            break;
        }
        MeasurmentData[i] = (int) strtol(input, (char **)NULL, 10);
        nrMeasurement++;
    }

    return nrMeasurement;
}

void showMeasurments(int* MeasurmentData, int length) {
    int i = 0;

    printf(" ======== Measurment ======== \n");

    for(i = 0; i < length; i++) {
        printf("%d ", MeasurmentData[i]); 
    }

    printf("\n");
}

int main()
{
    int MeasurmentData[MAXIMUM_MEASURMENT];
    int nrOfmeasurments;
    char menuoption;

    while (1) 
    {
        printf("Measurment tool 2.0\n" "v (View)\n" "e (Enter)\n" "c (Compute)\n" "r (Reset)\n" "q (Quit)\n enter your option:\n");

        scanf(" %c", &menuoption);

        if (menuoption =='e') // enter values
        {
            enter(MeasurmentData);
        }
        else if(menuoption == 'v') // view values
        {
            // show
            showMeasurments(MeasurmentData, MAXIMUM_MEASURMENT);
        }
        else if(menuoption == 'c')
        {

        }
        if(menuoption == 'q')
        {
            printf("Exiting Measurment tool 2.0\n");
            break; 
        }
    }

    return 0;
}

Редактировать: я обновил код.Итак, я прочитал комментарии к вашему вопросу, и там вы немного лучше объяснили, чего вы пытаетесь достичь.Так как у вас есть требование нажать 'q', чтобы остановить чтение значений.Я должен прочитать все измерения в виде строки и преобразовать в целое число, если это не символ q.

Редактировать 2: Спасибо @ user3629249 за то, что он указал на некоторые недостатки в коде, который обновляется с его предложениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...