【发布时间】:2017-07-06 08:45:39
【问题描述】:
我编写了一个程序,它将在 printf 之前两次 scanf 并输出两个应该是单个 printf 的内容。该问题似乎从要求用户输入 1 到 4 之间的数字以查看输入天数的平均温度时开始出现。
我不确定是什么导致了这种双重输入和输出以及偶尔的延迟。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main (void) {
int i;
int limit;
int day[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int high[10], low[10];
printf("---===IPC Temperature Analyzer V2.0===---\n");
printf("Please enter the number of days between 3 and 10, inclusive: ");
scanf("%d", &limit);
while (limit <= 2 || limit >= 11) {
printf("Invalid entry, please enter a number between 3 and 10, inclusive: ");
scanf("%d", &limit);
}
for (i = 0; i < limit; i++) {
printf("Day %d - High: ", day[i]);
scanf("%d", &high[i]);
printf("Day %d - Low: ", day[i]);
scanf("%d", &low[i]);
}
printf("\nDay Hi Low\n");
for (i = 0; i < limit; i++) {
printf("%d %d %d\n", day[i], high[i], low[i]);
}
int max = 0;
int min = 0;
for (i = 0; i < limit; i++) {
if (high[max] < high[i])
max = i;
if (low[min] > low[i])
min = i;
}
printf("\nHighest temperature was: %d on day %d\n", high[max], day[max]);
printf("Lowest temperature was: %d on day %d\n", low[min], day[min]);
int n;
do {
printf("\nEnter a number between 1 and 4 to see the average temperature "
"for the entered number of days, enter a negative number to exit:");
scanf("%d\n", &n);
while (n > 4) {
printf("Invalid entry, please enter a number between 1 and 4, inclusive: ");
scanf("%d", &n);
}
while (n < 0) {
printf("Goodbye!\n");
exit(0);
}
float avgSum = 0.0;
for (i = 0; i < n; i++) {
float avgOfDay = (high[i] + low[i]) / 2.0;
avgSum += avgOfDay;
}
float overallAvg = avgSum / n;
printf("The average temperature up to day %d is: %.2f\n", day[n - 1], overallAvg);
} while (n > 0 || n < 4);
return 0;
}
示例输出:
Enter a number between 1 and 4 to see the average temperature for the entered number of days, enter a negative number to exit:5
5
Invalid entry, please enter a number between 1 and 4, inclusive: Invalid entry, please enter a number between 1 and 4, inclusive: 3
The average temperature up to day 3 is: 2.50
Enter a number between 1 and 4 to see the average temperature for the entered number of days, enter a negative number to exit: 2
2
The average temperature up to day 2 is: 2.75
Enter a number between 1 and 4 to see the average temperature for the entered number of days, enter a negative number to exit: -1
The average temperature up to day 2 is: 2.75
Enter a number between 1 and 4 to see the average temperature for the entered number of days, enter a negative number to exit: -1
Goodbye!
【问题讨论】:
-
如果你给出预期输出和exact实际输出,你的问题会更清楚。
-
好的,我已经用正在发生的问题的示例更新了我的帖子。
-
请注意,拼写一致性对程序员来说是非常可取的——这对于变量名和良好的内部消息至关重要 (
temeprature-->temperature)。 -
由于
exit()不返回,循环while (n < 0) { printf("Goodbye!\n"); exit(0); }最好写成if语句:if (n < 0) { printf("Goodbye!\n"); exit(0); }。不过,这不是您当前问题的一部分。 -
这一行:
} while (n > 0 || n < 4);允许接受任何数字。也许您的意思是:} while (n > 0 && n < 4);但是,它只允许值 1,2,3 建议:} while( n>0 && n <=4)