2015-06-19 4 views
1

Я пытаюсь получить этот код для вычисления среднего GPA класса. Проблема, с которой я сталкиваюсь, заключается в том, что я, похоже, допустил ошибку в моем коде do...while, потому что, когда я запускаю его, он постоянно возвращается к просьбе ввести другой GPA, а не спрашивать, хочу ли я рассчитать средний или не.Калькулятор GPA в C

#include<stdio.h> 

int main() 
{ 
    float faGPA[30], fSum = 0, fAvg = 0; 
    int x, y; 
    char cResp = '\0'; 

    printf("\t\tGPA Calculator\n"); 
    printf("\nEnter up to 30 GPAs into the calculator.\n"); 

    do{ 
     printf("\nEnter a GPA: "); 
     scanf("%f", &faGPA[x]); 
     x++; 
     printf("\nCalculate the GPA average (Y/N)?\n"); 
     scanf("%c", &cResp); 
    } while(x < 30 && cResp != 'Y' || x < 30 && cResp != 'y'); 

    for(y = 0; y < (x + 1); y++) 

    fSum += faGPA[y]; 
    fAvg = (fSum/(y - 1)); 

printf("\nThe class GPA is:%.2f", fAvg); 

return 0; 
} 
+0

Что х инициализируется в первый раз вокруг? Значение мусора, необходимое для инициализации x как 'int x = 0' – JackV

ответ

2

Здесь есть две проблемы. Во-первых, вам нужно отбросить новые строки на вашем scanf. См. here.

Вторая || оператор заставит весь оператор оценивать значение true независимо от того, введен ли пользователь Y или y. Попробуйте переключиться на оператор & & и закрыть две проверки в их собственной скобке.

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

float faGPA[30], fSum = 0, fAvg = 0; 
int x = 0, y = 0; 
char cResp = '\0'; 

printf("\t\tGPA Calculator\n"); 
printf("\nEnter up to 30 GPAs into the calculator.\n"); 

do{ 
    printf("\nEnter a GPA: "); 
    scanf("%f", &faGPA[x]); 
    x++; 
    printf("\nCalculate the GPA average (Y/N)?\n"); 
    scanf("\n%c", &cResp); 
} while (x < 30 && (cResp != 'Y' && cResp != 'y')); 

for (y = 0; y < (x + 1); y++) 

    fSum += faGPA[y]; 
fAvg = (fSum/(y - 1)); 

printf("\nThe class GPA is:%.2f", fAvg); 

return 0; 
+0

Когда вы запускаете программу, действительно ли она запрашивает вход пользователя для выхода из цикла« do ... while »? Я попробовал очистить логику оператора «while», как было предложено, но программа все еще пропускает поиск пользователя, насколько рассчитывается GPA или нет. –

+0

Да, это для меня. Это то, что сделал \ n в аргументе scanf. Я использую MS VC++. – jllama

+0

Это было для меня тоже. \ n был ключом. –

2

Ваша логика в проверке внизу немного.

Это должно быть «конец, если вы сказали, Y или Y, или если размер класса ударил 30.

Это приводит к:

while(x < 30 || cResp != 'y' || cResp != 'Y')