2013-09-21 4 views
0

У меня проблема с C, когда я пытаюсь найти самый большой поплавок массива, но мой самый большой int работает нормально. Я думаю, что могу пройти мимо длины массива, но я не понимаю, как это возможно.Самый большой поплавок в выпуске массива C

int largestInt(int array[], int length){ 
    int max = array[0]; 
    int i; 

    for(i=1; i<length; i++){ 
     if(array[i] > max){ 
       max = array[i]; 
     } 
    } 

    return max; 
} 

Приведенные выше код отлично подходит для Интсов работает, однако, если я могу изменить его для работы с поплавками следующим образом,

float largestFloat(float array[], int length){ 
    float max = array[0]; 
    int i; 

    for(i=1; i<length; i++){ 
     if(array[i] > max){ 
       max = array[i]; 
     } 
    } 

    return max; 
} 

Иногда это даст мне правильный ответ, а иногда это просто дать мне огромное количество даже не в исходном массиве. Это заставляет меня поверить, что я прохожу мимо длины массива.

float f[15] = {9.5, 45.64, 313.11, 113.89, 81.56, 250.00, 11.9, 469.98, 313.11, 4.68, 34.33, 8013.55, -10.15, 11.5, 88.0} <-- filled with 15 values 
largestFloat(f,15); 

Это то, что я буду бежать.

+1

Вам нужно показать нам код, который вызывает функцию 'mostFloat()'. Проблема может быть там. – ChrisWue

+1

Вы уверены, что 'length' правильно установлен каждый раз, когда вы называете' bigFloat'? Вы пробовали переходить через приложенный отладчик? – Dai

+0

Я делаю массив «float f [15];» и заполните все значения. Затем я запускаю «mostFloat (f, 15)»; – wzsun

ответ

1

Проблема заключается в том, что вы найдете самый большой float но затем возвращает значение int

int largestFloat(float array[], int length){  // return type is int 
    float max = array[0];      // max is float 
    int i; 

    for(i=1; i<length; i++){ 
     if(array[i] > max){ 
       max = array[i]; 
     } 
    } 

    return max; 
} 
+2

Это, конечно же, не помогает, но он должен просто поместить float, а не возвращать что-то явно не в массив. – zneak

+0

Да, это была опечатка с моей стороны. Извините – wzsun

+2

@wzsun: Скопируйте и вставьте свой код в вопрос, а не переименовывайте его. Если у вас неправильный тип возврата, вы, вероятно, ошиблись, если перепечатали свой код. По этой причине копирование/вставка намного превосходит повторный набор. – user2357112

2

Не видя весь пример, я должен был бы сказать, что вы правы. Размер массива, вероятно, неверен. Во-первых зафиксировать тип возвращаемого значения:

float largestFloat(float array[], int length){ 

Далее, вы можете захотеть добавить предохранитель против пустого массива, так что автоматически overlflow выборки массива [0]:

if (length < 1) return 0; 

Остальных largestFloat () хороший.

Тогда звоните с:

float f[15] = {2.3 ... 102} <-- filled with 15 values 
size_t length = sizeof f/sizeof f[0]; 
float f_max = largestFloat(f, length); 
printf("max=%g, length=%d\n", f_max, length); 

Это будет вычислять (во время компиляции) фактический размер массива ф. Ищите случаи, когда длина не такая, как вы считали. Это может произойти, если вы наберете a. вместо a, между значениями, которые еще не имеют десятичной точки. Это и разборки являются единственными способами, которые я знаю, чтобы получить 14 или меньше значений из того, что кажется 15.

+0

Это вопрос C, а не C++. – user2357112

+0

@ user2357112 Совершенно верно. Исправлено. –

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