有人看到我似乎错过的错误吗?它只是继续打印0.00而不停止不知道它为什么这样做。它工作得更早,我没有对影响它的时间做任何改变,所以我真的很困惑。
`
int main (int argc, const char * argv[])
{
int i, j, numStudents;
double total, average, difference, lessThan, greater, exchange;
total = 0;
while (scanf("%1d", &numStudents) != EOF)
{
/* Ends program at zero */
if (!numStudents)
{
return 0;
}
double amountSpent[numStudents];
total = 0;
greater = 0;
lessThan = 0;
for(i = 0; i < numStudents; i++)
{
scanf("%1lf\n", &amountSpent[i]);
total += amountSpent[i];
}
/* cleans total, than calculates */
average = total/numStudents;
exchange = 0;
for(i = 0; i < numStudents; i++)
{
difference = amountSpent[i] - average;
if (difference < 0)
{
lessThan += difference;
}
else
{
greater += difference;
}
}
/* if (-lessThan > greater)
{
exchange = -lessThan;
}
else
{
exchange = greater;
}
*/
exchange = (-lessThan > greater)? -lessThan : greater;
printf("$%.2f\n", exchange);
}
return 0;
}
`
答案 0 :(得分:0)
用户输入混淆而没有提示并使用scanf()
尾随'\n'
。虽然有些想法可能有所帮助,但其他代码确实有效。
将输入数字输入限制为1个字符的错误, - 建议在说明符之前删除1
。
同时针对== 1
而不是!= EOF
进行测试,以应对非数字输入。
// while (scanf("%1d", &numStudents) != EOF)
while (puts("Enter students (0 to quit)", scanf("%d", &numStudents) == 1)
检查用户输入结果的好主意。删除scanf()
尾随'\n'
// scanf("%1lf\n", &amountSpent[i]);
puts("Enter amount spent");
if (1 != scanf("%lf", &amountSpent[i])) {
return 1;
}