2014-10-30 2 views
2

Я делаю проект с использованием массивов, функций и случайных чисел. Когда я запускаю программу, она дает ошибку, указывающую на строку 44. Глядя на код, я не могу понять, в чем проблема.
Ошибка говорит: int [i] не может быть преобразован в int в строке 44.Массивы, функции и случайные

Любая идея, что не так?
Кстати могу ли я отформатировать это с помощью цифр?

// Debugging: grades.cpp 
#include <iostream> 
#include <iomanip> 
#include <ctime> 

using namespace std; 

const int NUM_GRADES = 10; 
const int NUM_SUDENTS = 3; 

int findHighest(int *); 
int findLowest(int *); 
void printDatabase(const int [][NUM_GRADES], const char [][ 20 ]); 

int main() 
{ 
    int student1[ NUM_GRADES ] = { 0 }; 
    int student2[ NUM_GRADES ] = { 76, 89, 81, 42, 66, 93, 104, 
            91, 71, 85 }; 
    int student3[ NUM_GRADES ] = { 65, 69, 91, 89, 82, 93, 72, 
            76, 79, 99 }; 
    char names[ NUM_SUDENTS ][ 20 ] = { "Bob", "John", "Joe" }; 

    int database[ NUM_SUDENTS ][ NUM_GRADES ]; 
    int i = 0; 

    srand(time(0)); 

    // initialize student1 
    for (i = 0; i < NUM_GRADES; i++) 
     student1[ NUM_GRADES ] = rand() % 50 + 50; 

    // initialize database 
    for (i = 1; i < NUM_GRADES; i++) { 
     database[ 0 ][ i ] = student1[ i ]; 
     database[ 1 ][ i ] = student2[ i ]; 
     database[ 2 ][ i ] = student3[ i ]; 
    } // end for 

    printDatabase(database, names); 

    for (i = 0; i < NUM_SUDENTS; i++) { 
     cout << names[ i ] << "'s highest grade is: " 
     << findHighest(database[i]) << endl   // This is line 44 in my program 
     << names[ i ] << "'s lowest grade is: " 
     << findLowest(database[ i ]) << endl; 
    } // end for 
} // end main 

// determine largest grade 
int findHighest(int a[]) 
{ 
    int highest = a[ 0 ]; 
    for (int i = 1; i <= NUM_GRADES; i++) 
     if (a[ i ] > highest) 
      highest = a[ i ]; 
    return highest; 
} // end function findHighest 

// determine lowest grade 
int findLowest(int a[]) 
{ 
    int lowest = a[ 0 ]; 
    for (int i = 1; i < NUM_GRADES; i++) 
     if (a[ i ] < lowest) 
      lowest = a[ i ]; 
    return lowest; 
} // end lowestGrade 

// output data 
void printDatabase(int a[][ NUM_GRADES ], char names[][ 20 ]) 
{ 
    cout << "Here is the grade database\n\n" 
    << setw(10) << "Name"; 
    for (int n = 1; n <= NUM_GRADES; n++) 
     cout << setw(4) << n; 
    cout << endl; 
    for (int i = 0; i < NUM_SUDENTS; i++) { 
     cout << setw(10) << names[ i ]; 
     for (int j = 0; j < NUM_GRADES; j++) 
      cout << setw(4) << a[ i, j ]; 
     cout << endl; 
    } // end for 
    cout << endl; 
} // end printDatabase 
+0

Ничего себе, смешно. Я вставил код в свой текстовый редактор, и он сказал, что строка 44 - это пустая строка. – chris

+1

Почему так много кода, когда вы знаете, откуда исходит ошибка? – 0x499602D2

+1

Кстати, после добавления правильного include для 'srand', ошибок компилятора нет, просто некоторые полезные предупреждения и ошибка компоновщика, потому что вы никогда не определяли перегрузку' printDatabase', которую вы используете: http: //coliru.stacked- crooked.com/a/8d810ca773d5f502 – chris

ответ

0

поэтому, посмотрев его, я нашел компиляционную ошибку. Определение и декларация «printDatabase» не совпадают. В заявлении указывается, что функция принимает значения параметров const, но это определение отсутствует.

Однако, как только это исправлено, во время выполнения есть ошибка. Вопрос здесь

for (i = 0; i < NUM_GRADES; i++) 
    student1[ NUM_GRADES ] = rand() % 50 + 50; 

student1 в настоящее время индекс на NUM_GRADES, что длина массива student1. Однако, поскольку индексирование массива начинается с 0, последний индекс будет NUM_GRADES - 1. Таким образом, происходит запись границ массива. Хотя я считаю, что поиск кода требует от индекса, следует индексировать с помощью i

for (i = 0; i < NUM_GRADES; i++) 
    student1[ i] = rand() % 50 + 50; 
Смежные вопросы