#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. Существуют разные способы использования только одного параметра. Вы могли бы создать структуру, содержащую как индекс, так и массив (указатель), и передать это. Вы также могли бы сделать одну из переменных глобальной. Тем не менее, я действительно думаю, что два параметра, вероятно, лучше всего.