C 我的代码继续打印出零,我不知道为什么
有人看到我似乎错过的错误吗?它只是继续打印0.00而不停止,不知道它为什么这样做。它很早就开始工作了,我没有做任何会影响它的改变,所以我真的很困惑C 我的代码继续打印出零,我不知道为什么,c,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", &num
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;
}
`
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;
}
int main(int argc,const char*argv[]
{
int i、j、NUM学生;
双倍合计、平均值、差额、小于、大于、交换;
总数=0;
while(scanf(“%1d”,&numStudents)!=EOF)
{
/*程序在零结束*/
如果(!numStudents)
{
返回0;
}
双倍金额[学生];
总数=0;
大于等于0;
lessThan=0;
对于(i=0;i更大)
{
交换=-小于等于1;
}
其他的
{
交换=更大;
}
*/
交换=(-lessThan>更大)?-lessThan:更大;
printf(“$%.2f\n”,交换);
}
返回0;
}
`如果没有提示和使用
scanf()
尾部的'\n'
,用户输入会被混淆。尽管有些想法可能会有所帮助,但Else代码确实有效
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个字符,-建议将1
放在说明符之前
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
而不是进行测试EOF
用于处理非数字输入
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;
}
// while (scanf("%1d", &numStudents) != EOF)
while (puts("Enter students (0 to quit)", scanf("%d", &numStudents) == 1)
检查用户输入的结果是个好主意。放下scanf()
尾部的'\n'
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;
}
// scanf("%1lf\n", &amountSpent[i]);
puts("Enter amount spent");
if (1 != scanf("%lf", &amountSpent[i])) {
return 1;
}