【发布时间】:2020-09-21 23:07:44
【问题描述】:
此代码尝试通过选择完成比赛时间较少的玩家来找到比赛的获胜者和第二名。
#include <stdio.h>
int main(void){
int id[8] = {0};
float time[8] = {0};
for(size_t i=0; i<8; ++i) {
printf("\nWrite id player: ");
scanf("%d", &(id[i]));
printf("\nWrite time: ");
scanf("%f", &(time[i]));
}
size_t num1 = 0;
size_t num2 = 0;
for(size_t j=0; j<8; ++j){
if (time[num1]>time[j]){
num1 = j; // to find the winner
}
if (time[num2]>time[j] && time[num2]>time[num1]){
num2 = j; // to find the second position player
}
}
printf("\n\nWinner: %d, with time: %f", id[num1], time[num1]);
printf("\n\nSecond: %d, with time: %f", id[num2], time[num2]);
printf("\n\n");
}
不明白为什么这不起作用,它只适用于获胜者,但不适用于第二名。
输出:
Write id player: 1838
Write time: 4
Write id player: 3492
Write time: 6
Write id player: 3219
Write time: 2
Write id player: 48929
Write time: 9
Write id player: 38928
Write time: 4
Write id player: 23892
Write time: 4
Write id player: 89498
Write time: 1
Write id player: 48929
Write time: 6
Winner: 89498, with time: 1.000000
Second: 89498, with time: 1.000000
time[num2]>time[j] && time[num2]>time[num1] 条件不应该完成这项工作吗? &&不应该确保第二个获胜者的时间是第j次的次要,但也大于获胜者。
【问题讨论】:
-
为什么不在调试器中单步调试代码和/或添加更多调试打印语句?特别是,在程序运行时跟踪
num1和num2的值。调试是开发人员在发现程序无法按预期工作时应该做的事情。
标签: c for-loop if-statement compare conditional-statements