2015-02-14 2 views
0

Я довольно новичок в C++, и мне трудно передать массив через цикл while и вычислять среднее значение. Ниже мой код, кто-то укажет мне в правильном направлении?значение массива в do while цикл не переходит к следующему

#include <iostream> 

using namespace std; 

int main() { 
    int marks[5], sum = 0, g, avg=0; 
    do { 
     cout << "enter a mark: "; 
     cin >> marks[g]; 
     if (marks[g] < 0 || marks[g] > 100) 
      "Invalid Mark, start over"; 
     marks[g++]; 
    } while(g <= 5); 
    do { 
     sum += marks[g++]; 
     avg = sum/5; 
    } while(g <= 5); 
    cout << "The average of the marks is: " << avg << endl; 
} 
+0

Неинициализированные (нестатические) локальные переменные имеют неопределенное значение, используя их, кроме как для их инициализации приводит к [* неопределенное поведение *] (http://en.wikipedia.org/wiki/Undefined_behavior). –

+1

[У меня есть сон] (http://dev-jungle.blogspot.de/2015/02/i-have-dream-im-dreaming-of-so-called-c.html) –

+1

@ πάνταῥεῖ И кроме того , каждый инструктор показывает пример с 'using namespace std', что ужасно !! – CoryKramer

ответ

3

Вы никогда не инициализируется переменную индекса g, вы должны инициализировать его

int g = 0; 

Кроме того, я бы рекомендовал ваш первый цикл будет что-то вроде

while (g < 5) 
{ 
    int value; 
    cout << "enter a mark: "; 
    cin >> value; 

    if (value < 0 || value > 100) 
    { 
     "Invalid Mark, enter again"; 
    } 
    else 
    { 
     marks[g] = value; 
     ++g; 
    } 
} 

Аналогично последний цикл будет

for {int i = 0; i < 5; ++i) 
{  
    sum += marks[i]; 
} 
avg = sum/5; 
0

Во-первых, инициализировать g к 0, используя

int g = 0; 

Во-вторых, изменить

while(g <= 5); 

в

while(g < 5); 

, потому что, как marks[] имеет размер 5, доступные индексы от 0 до 4.

Исправить ed code:

#include <iostream> 
using namespace std; 
int main() 
{ 
    int marks[5], sum = 0, g = 0, avg=0; 
    do 
    { 
     cout << "enter a mark: "; 
     cin >> marks[g]; 

     if (marks[g] < 0 || marks[g] > 100) 
     { 
      "Invalid Mark, start over"; 
     } 
     else g++; 
    } 
    while(g < 5); 
g = 0; //Set g to zero to restart counting. 
do { 

    sum += marks[g++]; 
    avg = sum/5; 
} 
while(g < 5); 
cout << "The average of the marks is: " << avg << endl; 
} 
0

переменная g не инициализирована должным образом. также массив, доступ к которому не связан. правильный код должен быть:

#include<iostream> 

using namespace std; 

int main() 

{ 
    int marks[5], sum = 0, g = 0, avg=0; 

    do 
    { 
     cout << "enter a mark: "; 
     cin >> marks[g]; 

     if (marks[g] < 0 || marks[g] > 100) 
     { 
      "Invalid Mark, start over"; 
     } 
     else 
      marks[g++]; 

    } 
    while(g < 5); 
    g = 0; 

    do { 

     sum += marks[g++]; 
     avg = sum/5; 
    } 
    while(g < 5); 

    cout << "The average of the marks is: " << avg << endl; 

    system("pause"); 

} 
+0

Спасибо, это действительно полезно. –

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