【发布时间】:2022-01-18 21:46:46
【问题描述】:
为什么我的 do/ while 循环在检查条件之前重复了 2 次?
int main() {
char quit;
quit = getchar();
do {
printf("Next state: ");
clock_t start = clock();
count_values(a, b);
clock_t end = clock();
float seconds = (float)(end - start) / CLOCKS_PER_SEC;
print_state(b);
printf("\nTime: %f\n", seconds);
swap(a, b);
printf("Press enter to print next generation. To quit, enter 'q'.");
quit = getchar();
} while(quit != 'q');
return 0;
}
只有在循环重复 2 次后,getchar() 才等待输入,为什么?如何解决?
【问题讨论】:
-
getchar()在第一次通话后离开换行符,然后您在第二次通话时阅读。 -
@dunlop 这是因为调用 getchar quit = getchar();还读取换行符'\n';
-
因为您的第一个输入是
q和一个换行符。所以你的quit等于q从循环外的第一个getchar直到你在循环内第二次调用getchar,它用换行符覆盖它。 -
简单修复,使用
fgets()。 -
旁白:没有理由使用
float seconds。建议double类型和数学。
标签: c loops while-loop do-while