2013-10-24 3 views
0

Я пытаюсь написать код, чтобы указать пробег газа, и до сих пор он работает. Проблема в том, что она не работает так, как должна. Код ниже запрашивает ввод, а затем отображает список указанных входов вместе с вычисленным MPG.Array Program Weird Output

#include<iostream> 
using namespace std; 
//function prototype 
void CalcAverage (int arr1[], float arr2[], int size); 
//global variables 
int mil [3]; 
float gal [3]; 
float mpg [3]; 
//main program 
int main() 
{ 
char month [7]; 
int day [3]; 
cout << "Please enter the starting month" << endl; 
cin >> month; 

cout << "Please enter starting day entry 1" << endl; 
cin >> day [0]; 
cout << "entry 2" << endl; 
cin >> day [1]; 
cout << "entry 3" << endl; 
cin >> day [2]; 
cout << "entry 4" << endl; 
cin >> day [3]; 

cout << "Please enter gallons entry 1" << endl; 
cin >> gal [0]; 
cout << "entry 2" << endl; 
cin >> gal [1]; 
cout << "entry 3" << endl; 
cin >> gal [2]; 
cout << "entry 4" << endl; 
cin >> gal [3]; 

cout << "Please enter miles entry 1" << endl; 
cin >> mil [0]; 
cout << "entry 2" << endl; 
cin >> mil [1]; 
cout << "entry 3" << endl; 
cin >> mil [2]; 
cout << "entry 4" << endl; 
cin >> mil [3]; 

CalcAverage (mil,gal,4); 

cout << "Week of" << "\t\tGallons" << "\t\tMiles" << "\t\tMPG" << endl; 
cout << "_ _ _ _ _ _ _" << "\t_ _ _ _ _" << "\t_ _ _ _" << "_ _ _ _" << endl; 
cout << month << " " << day [0] << "\t" << gal [0] << "\t\t" << mil [0] << "\t\t" << mpg [0] <<  endl; 
cout << month << " " << day [1] << "\t" << gal [1] << "\t\t" << mil [1] << "\t\t" << mpg [1] <<  endl; 
cout << month << " " << day [2] << "\t" << gal [2] << "\t\t" << mil [2] << "\t\t" << mpg [2] <<  endl; 
cout << month << " " << day [3] << "\t" << gal [3] << "\t\t" << mil [3] << "\t\t" << mpg [3] <<  endl; 

system("PAUSE"); 

} 
//function definition 
void CalcAverage (int arr1[], float arr2[], int size) 
{ 
//statements 
mpg [0] = mil [0]/gal [0]; 
mpg [1] = mil [1]/gal [1]; 
mpg [2] = mil [2]/gal [2]; 
mpg [3] = mil [3]/gal [3]; 

} 

Код работает, и у меня нет ошибок. Однако, когда код отображает вывод, некоторые из результатов переключаются или перепутаны или полностью случайны (мой 3-й галльный вход становится моим вводом 1-го миля и т. Д.). Что вызывает эту проблему, и как я могу ее исправить?

ответ

2

Обратите внимание, что при объявлении массива, как mil[3], массив имеет элементы mil[0], mil[1] и mil[2]. Таким образом, недопустимо использовать mil[3]. Изменить объявление массива для:

int mil [4]; 
float gal [4]; 
float mpg [4]; 

также день, чтобы использовать [4] вместо [3]

1

Вы делаете такие вещи, как:

cin >> day [3]; 

, но у вас есть только:

int day [3]; 

Вы перезапись конец вашего массива и в следующем. Вам нужно изменить это на int day[4], так как day[3] - это четвертый элемент, а не третий.

2

Массивы всех размеров 3, и вы пытаетесь ввести 4 значения в каждый. Увеличение их размеров одно:

int mil [4]; 
float gal [4]; 
float mpg [4]; 

... 

int day [4]; 
1

изменения с этим:

int mil [4]; 
float gal [4]; 
float mpg [4]; 

int day [4];