C语言的GPA计算器
GPA Calculator in C
我正在尝试获取此代码来计算 class 的平均 GPA。我遇到的问题是我的 do...while
代码似乎犯了一个错误,因为当我 运行 它时,它不断地循环回到要求我输入另一个 GPA,而不是询问如果我想计算平均值。
#include<stdio.h>
int main()
{
float faGPA[30], fSum = 0, fAvg = 0;
int x, y;
char cResp = '[=10=]';
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;
}
这里有两个问题。首先,您需要丢弃 scanf 中的新行。有关详细信息,请参阅 here。
第二个||无论用户输入的是 Y 还是 y,运算符都会导致整个语句的计算结果为真。尝试切换到 && 运算符并关闭括号中的两个检查。
请参阅下面的示例 - 它至少应该让你更进一步,尽管我仍然没有从你的数学中得到正确的答案。
float faGPA[30], fSum = 0, fAvg = 0;
int x = 0, y = 0;
char cResp = '[=10=]';
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;
你在底部检查的逻辑有点不对。
如果你说 Y 或 y 或者如果 class 尺寸达到 30,它应该是 'end。
这转化为:
while(x < 30 || cResp != 'y' || cResp != 'Y')
我正在尝试获取此代码来计算 class 的平均 GPA。我遇到的问题是我的 do...while
代码似乎犯了一个错误,因为当我 运行 它时,它不断地循环回到要求我输入另一个 GPA,而不是询问如果我想计算平均值。
#include<stdio.h>
int main()
{
float faGPA[30], fSum = 0, fAvg = 0;
int x, y;
char cResp = '[=10=]';
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;
}
这里有两个问题。首先,您需要丢弃 scanf 中的新行。有关详细信息,请参阅 here。
第二个||无论用户输入的是 Y 还是 y,运算符都会导致整个语句的计算结果为真。尝试切换到 && 运算符并关闭括号中的两个检查。
请参阅下面的示例 - 它至少应该让你更进一步,尽管我仍然没有从你的数学中得到正确的答案。
float faGPA[30], fSum = 0, fAvg = 0;
int x = 0, y = 0;
char cResp = '[=10=]';
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;
你在底部检查的逻辑有点不对。
如果你说 Y 或 y 或者如果 class 尺寸达到 30,它应该是 'end。
这转化为:
while(x < 30 || cResp != 'y' || cResp != 'Y')