2014-02-03 4 views
-1

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

#include<stdio.h> 
#include<conio.h> 

struct Candidate{ 
float Score; 
short Number; 
}candidate1[5]; 

main(){ 

int i,n,highest; 
for(i=0;i<5;i++){ 

printf("Candidate Number: "); 
scanf("%i",&candidate1[i].Number); 
printf("Score: "); 
scanf("%i",&candidate1[i].Score); 

highest=candidate1[i].Score;  

for (n=0;n<5;n++) 

if (candidate1[i].Score>highest); 
} 
printf("Highest Number: %i\n",highest); 

system("pause");  

} 
+3

Вы понимаете 2D массивы в C вообще? Если нет, я рекомендую ударить хороший учебник или книгу, поскольку это абсолютно основательно. – keshlam

+1

Вам действительно нужно изучить базовый синтаксис C/C++. 'Если(); } 'не приближается к действительности. –

+0

2D-массив? вы использовали массив 1D. – BLUEPIXY

ответ

0

Наиболее распространенная идиома для нахождения макс типа <T> (двойной, Int, независимо) из массива структур <S> идет следующим образом

<S> array[numElements]; //defined and allocated earlier. Has a score `<T> score` 
<T> bestScore = array[0].score; 
int bestIndex = 0; 
int i; 
for(i=1;i<numElements;i++) { 
    if(array[i].score>bestScore) { 
    bestIndex = i; 
    bestScore = array[i].score; 
    } 
} 
//do things with bestScore and array[bestIndex]; 

Если у вас есть 2D массива можно заменить одиночный цикл for с циклом double for и использовать дополнительную переменную bestIndex для второго измерения.

Если массив может содержать 0 элементов, то иногда обычно устанавливается наилучшее значение для максимального минимального значения и цикла от 0 до numElements.

0

исправить, как это

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

struct Candidate { 
    float Score; 
    short Number; 
}candidate1[5]; 

int main(void){ 
    int i, n, highest = 0; 
    n = sizeof(candidate1)/sizeof(*candidate1); 
    for(i=0;i<n;++i){ 
     printf("Candidate Number: "); 
     scanf("%hi", &candidate1[i].Number); 
     printf("Score: "); 
     scanf("%f",&candidate1[i].Score); 
     if(candidate1[highest].Score < candidate1[i].Score) 
      highest = i; 
    } 
    printf("Highest Number: %f\n", candidate1[highest].Score); 

    system("pause"); 
    return 0; 
} 

,

Смежные вопросы