Как остановить переменную счетчика, которая продолжает считать значения из предыдущих циклов for? Программа C - PullRequest
0 голосов
/ 13 января 2019

Я застрял на последней части своего домашнего задания и надеюсь, что смогу получить некоторые рекомендации о том, что делать. Задание простое, я создаю программу, которая просит пользователя вводить результаты тестов до тех пор, пока они не введут значение моего дозорного -1. Затем на выходе отображается среднее значение всех вмененных баллов, которое должно повторяться 4 раза после выхода из программы. Все работает, кроме моего значения счетчика. Счетчик продолжает подсчитывать вмененные оценки как из предыдущего, так и из текущего цикла, а не только из текущего цикла. Таким образом, в итерации 2 он дает мне среднее значение всех входных данных из первого цикла и текущего цикла.

Примечание: я еще не узнал о массивах или о каком-либо другом супервысоте.

Я уже инициализировал переменную count в 0, но я не могу понять, почему она не сбрасывается в каждом цикле. Я переместил count = 0 после цикла и перед циклом, и это ничего не делает.

#include <stdio.h>
float calculateAverage(float, float);
FILE *fp;

int main(void)
{
    int i;
    float avg, score, sum = 0, count = 0;

    fopen_s(&fp, "csis.txt", "w");
    printf("***Average of Inputed Grades***\n");
    for (i = 1; i <= 4; ++i)
    {
        do
        {
            printf("\nEnter Test Scores or -1 for average\n");
            scanf_s("%f", &score);
            fprintf(fp, "\nEnter Test Scores or -1 for average\n%f\n", score);
            if (score != -1)
            {
                sum = sum + score;
                count++;
            }
        } while (score >= 0 && score <= 100 && score != -1);


        avg = calculateAverage(sum, count);
        printf("\nThe Average for the entered test scores is:%.2lf\n", avg);
        fprintf(fp, "\nThe Average for the entered test scores is:%.2lf\n", avg);
    }

    fclose(fp);
    getchar();
    return 0;
}

float calculateAverage(float sum, float count)
{
    float avg = sum / count;
    return (avg);
} 

Ожидаемые результаты должны отображать среднее значение вмененных тестовых баллов только для текущей итерации, а затем сбрасываться при следующей итерации.

1 Ответ

0 голосов
/ 13 января 2019

Переменные sum и count не сбрасываются после каждой итерации цикла do...while, поскольку вы явно не делаете этого. Вы устанавливаете их в 0 в начале функции, где они впервые определены, но вы больше не сбрасываете их в другом месте.

Перед началом цикла do...while необходимо установить оба значения на 0:

   for (i = 1; i <= 4; ++i)
    {
        sum = 0;
        count = 0;
        do
        {
           ...

Еще лучше, определите sum и count в этой точке (а также avg и score), поскольку они не используются вне цикла for:

   for (i = 1; i <= 4; ++i)
    {
        float sum = 0, count = 0, avg, score;
        do
        {
           ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...