2017-05-03 3 views
1

So erhielten wir ein Projekt mit zwei Arrays (eine eine Zeichenfolge und die andere einschließlich Werte), und ich entschied mich, Filme und Jahre zu verwenden. Einer der Parameter des Projekts besteht darin, die Maximal- und Minimalwerte zusammen mit ihrer Zeichenfolge anzuzeigen. Nun, das Max funktioniert gut, aber wenn ich versuche, min auszuführen, heißt es, dass es nicht initialisiert ist. Was mache ich falsch?Probleme mit der Indexierung Mindestwert von Array mit einer Funktion

#include <iostream> 
#include <string> 
using namespace std; 

int avgYear(int arr[], int size); 
int indexMin(int arr[], int size); 
int indexMax(int arr[], int size); 

int main() 
{ 
    int total = 0; 

    string name[] = {"Toy Story", "A Bug's Life", "Toy Story 2", "Monster's Inc.", "Finding Nemo", "The Incredibles", "Cars", "Ratatouille", "WALL-E", "Up"}; 
    int year[] = { 1995, 1998, 1999, 2001, 2003, 2004, 2006, 2007, 2008, 2009}; 
    for (int x = 0; x < 10; x++) 
     cout << name[x] << "  " << year[x] << endl; 

    cout << "The average year of release was " << avgYear(year, 10) << endl; 
    cout << "The First Year of Release was " << name[indexMin(year, 10)] << " in " << year[indexMin(year, 10)] << endl; 
    cout << "The Last Year of Release was "<< name[indexMax(year, 10)] << " in " << year[indexMax(year, 10)] << endl; 


    return 0; 
} 

int avgYear(int arr[], int size) 
{ 
    int avg; 
    int total=0; 
    for (int x = 0; x < size; x++) 
     total += arr[x]; 
    avg = total/size; 

    return avg; 
} 

int indexMin(int arr[], int size) 
{ 
    int iMin; 
    int min = arr[0]; 
    for (int x = 1; x < size; x++) 
     if (arr[x] < min) 
     { 
      min = arr[0]; 
      iMin = x; 
     } 
    return iMin; 
} 

int indexMax(int arr[], int size) 
{ 
    int iMax; 
    int max = arr[0]; 
    for (int x = 0; x < size; x++) 
     if (arr[x] > max) 
     { 
      max = arr[x]; 
      iMax = x; 
     } 
    return iMax; 
} 

Antwort

0

Wenn Minimalwert arr[0] dann iMin wird nicht immer initialisiert werden, da if (arr[x] < min) nie wahr zurück. Sie max-Funktion hat auch das gleiche Problem funktioniert, aber da max Element nicht am Index ist 0.

int iMin = 0; 

Sollte Ihr Problem beheben. Es ist auch eine gute Idee, eine Gewohnheit zu entwickeln immer initialisieren Sie Ihre Variablen und Felder. Der in einer nicht initialisierten Variablen gespeicherte Wert ist unbestimmt, reading from it is undefined behaviour.

+0

Oh danke, ich schätze wirklich. Ich habe stundenlang auf dieses Projekt geschaut. Danke auch für die Erklärung, warum, es war wirklich hilfreich! – Rebeckah

0

wenn Sie initialisieren Jahre wie folgt aus:.

int year[] = { 2009, 2008, 2007, 2006, 2004, 2003, 2001, 1999, 1998, 1995}; 

und dann, die min Arbeit in Ordnung, und die max Fehler^_^

Sie die Imin und Imax initialisieren müssen, und die anfängliche Anzahl muss gleich sein mit arr Index, wie folgt:

// min 
int nStartIndex = 0; 
int iMin = nStartIndex; 
int min = arr[nStartIndex]; 
// max 
int nStartIndex = 0; 
int iMax = nStartIndex; 
int max = arr[nStartIndex];