Как отобразить индекс в массиве с помощью функции

#c

#c

Вопрос:

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

 #define COLOR_SIZE 50
#define PLANT_ARRAY_SIZE 3

struct Plant
{
    int plantID;
    double price;
    char color[COLOR_SIZE];
};

int main()
{
int index;

//create array
struct Plant totalPlants[PLANT_ARRAY_SIZE];

//initialize array
for (int count = 0; count < PLANT_ARRAY_SIZE; count  )
    {
        initializePlant(totalPlants);
    }

// find lowest
index = findCheapestPlant(totalPlants, PLANT_ARRAY_SIZE);

//display lowest cost plant     
displayPlant(totalPlants[index]);

return 0;
}

void initializePlant(struct Plant *x)
{
    printf("nEnter the information for the next plantn");

    printf("Enter plant ID as an integer>");

    scanf("%d", amp;(x->plantID));
    printf("Enter the plant price as a double>");

    scanf("%lf", amp;(x->price));

    printf("Enter the perdominant color of the plant>");

    scanf("%s", amp;(x->color));

void displayPlant(struct Plant *x)
{

    printf("nThe cheapest plant is to be...n");
    printf("Plant ID %d which costs $%.2lf and the color is %sn", x->plantID, x->price, x->color);
}

int findCheapestPlant(struct Plant x[], int length)
{
    double lowest;
    int index = -1;
    int i = 0;

    if (length > 0)
    {
        lowest = x[i].price;
    }

    for (i = 0; i < length; i  )
    {
        if (x[i].price < lowest)
        {
            index = i;
            lowest = x[i].price;
        }



    }

    return index;
}

}
  

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

Комментарии:

1. Можете ли вы опубликовать определение findCheapestPlant() ?

2. Да, конечно, только что сделал это.

3. Пожалуйста, также опубликуйте свои ошибки или включите код для вашей функции инициализации initializePlant

4. Я думаю, ваша проблема в том, что вы ожидаете указатель в displayPlant , но вы передаете переменную

5. Вы неправильно вызываете initializePlant. Вы должны использовать переменную count в вызове, например initializePlant(amp;totalPlants[count]); .

Ответ №1:

В комментариях устранено несколько ошибок, в дополнение к исправлению этих ошибок, следующее должно помочь вам достичь того, что вы хотите сделать.

Чтобы получить код для отображения индекса, возможно, измените объявление displayPlant , чтобы также использовать индекс:

displayPlant(struct Plant *x, int index)

а затем передайте индекс, который у вас есть в вашем main, в функцию следующим образом

displayPlant(totalPlants[index], index);

Тогда, конечно, вы должны изменить свой оператор printf на что-то вроде:

printf("Plant ID %d (index: %d) which costs $%.2lf and the color is %sn", x->plantID, index, x->price, x->color);

РЕДАКТИРОВАТЬ: я должен также сказать, что инициализация вашего индекса на -1 — плохая идея, потому что это приведет к ошибкам seg, если ваш код не включает проверки на значение индекса > = 0.

Дополнительно добавьте это index = i; или index = 0 здесь в свой код:

 if (length > 0)
{
    lowest = x[i].price;
    index = i; //here
}
  

Комментарии:

1. Ах, спасибо. Это то, что я также пытался сделать, но я пытался сохранить функцию отображения только с 1 параметром, что является моей самой большой проблемой. Если я не смогу найти решение для поддержания одного параметра, я обязательно его изменю.

2. Существуют разные способы использования только одного параметра. Вы могли бы создать структуру, содержащую как индекс, так и массив (указатель), и передать это. Вы также могли бы сделать одну из переменных глобальной. Тем не менее, я действительно думаю, что два параметра, вероятно, лучше всего.