Как прервать цикл при введении отрицательного числа?

Alex Smith

А вот как реализовать условие выхода (ввод отрицательного значения при вводе оценки) из цикла, но так чтобы это введенное отрицательное значение не отражалось на расчете на средней оценке ?

for (int i = 0; i < 100; i++) {
    std::cout << "Math's score' " << i+1 << ": ";
    std::cin >> scores[i];
    if(scores[i]<0)
    break;

    sum += scores[i];
}

student.set_scores(scores);
float average_ball = sum / 5.0;
2 ответа

Alex Smith

int n=0;

Это не хорошо. Настоящий цикл

for (int i = 0; i < n; i++) {

тогда не выполняется ни один раз, так как для i = 0 не будет исполнено условие i < n. Измените его например на

int n = 100;

Дальше, часть

if(n<0)
    break;

бесполезная, так как n<0 никогда не наступит. Устраните ее.

Тестирование на отрицательность ввода будет наследовать после строки

std::cin >> scores[i];

и может иметь вид

if (scores[i] < 0)
    break;


Alex Smith

Ответ на изменен вопрос (не хорошо изменять вопрос после ответа, потому что другие люди не будут видеть связь между вопросом и ответом):

Все в порядке, так как команда

sum += scores[i];

после команды

break;

уже не выполнится. Единая правка в числе оценок - оно автоматически сохранено в переменной i после окончания цикла.

И так вместо

float average_ball = sum / 5.0;

используйте команду

float average_ball = sum / i;      // переменная i сохранила значение из предыдущего цикла

или - когда sum определена как int

float average_ball = float(sum) / i;

licensed under cc by-sa 3.0 with attribution.