我的代码继续打印出零,我不知道为什么

时间:2015-02-04 20:03:59

标签: c

有人看到我似乎错过的错误吗?它只是继续打印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;
}

`

1 个答案:

答案 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;
}