Поэтому лучше ограничить область видимости переменных, поэтому предложите удалить такие выражения, как:
int i,j;
, и в каждом for()
l oop заменить выражения, такие как:
for (i = 0; i < nop; i++)
с:
for ( int i = 0; i < nop; i++ )
и аналогично для каждого из for()
циклов
в функции: largest()
относительно:
int i,j;
double largest = test[i].score[j];
локальных переменных i
и j
используются без инициализации какого-либо определенного c значения. Результатом является неопределенное поведение.
относительно:
for (j = 0; j < nof; j++) {
if (test[i].score[j] < test[i].score[j+1])
, поскольку локальная переменная j
увеличивается до максимального допустимого индекса для массива, выражение: test[i].score[j+1]
будет доступно после конец массива. Помните: допустимые индексы в любом массиве (в C) равны 0 ... (количество элементов в массиве -1)
относительно:
scanf("%s", test[i].name);
это %s
будет позволяют пользователю вводить более 19 символов. Результатом такого действия пользователя является переполнение буфера и неопределенное поведение. Также следует проверить возвращаемое значение, чтобы убедиться, что операция прошла успешно. Рекомендовать:
if( scanf("%19s", test[i].name) != 1 )
{
fprintf( stderr, "scanf for player %d name failed\n", i );
exit( EXIT_FAILURE );
}
Где 19 означает, что поле name[]
имеет длину 20 символов, а %s
всегда добавляет к входу байт NUL.
в функции: largest()
относительно :
double large = test [i] .score [j];
Поскольку переменные i
и j
не инициализированы, это неопределенное поведение. предложите использовать:
double largest = 0.0;
и переместить эту строку сразу после:
for (i = 0; i < nop; i++) {
, чтобы выполнить «сброс» для каждого нового игрока, которого оценивают
сейчас для вашей проблемы:
относительно:
float largest(struct players *test, int nof, int nop){
....
double largest = test[i].score[j];
Не используйте имя функции в качестве локальной переменной внутри этой функции. Компилятор видит это как «рекурсивный» вызов, а не как локальную переменную.
Предложите использовать уникальное имя для локальной переменной.