|
发表于 2022-3-6 22:20:22
|
显示全部楼层
还是没有看明白你的程序,像下面这样描述一下你的代码逻辑
我在调试这个程序的时候,发现了两个问题
你检查一下,看看是不是你的代码中也是这个问题
- $ cat main.c
- #include <stdio.h>
- void guess(size_t value, size_t min, size_t max) {
- size_t i = 0;
- while(value) {
- size_t current = (min + max) / 2;
- //++current; // 最后会出现0的情况,这直接导致死循环,所以要加1
- //直接加1还是不行,会出现value是1,current是2的情况,这也导致死循环
- if(!current) ++current;
- printf("第%lu次尝试, 目标是%lu, 当前要存储的数是%lu, ", i++, value, current);
- if(current > value) {
- printf("存储失败\n");
- } else {
- printf("存储成功\n");
- value -= current;
- }
- max = current;
- }
- }
- int main(void) {
- size_t value;
- scanf("%lu", &value);
- guess(value, 0, 1001);
- /*
- for(size_t i = 0; i <= 1000; ++i) {
- guess(i, 0, 1001);
- printf("====================\n");
- }
- */
- return 0;
- }
- $ gcc-debug -o main main.c
- $ ./main
- 37
- 第0次尝试, 目标是37, 当前要存储的数是500, 存储失败
- 第1次尝试, 目标是37, 当前要存储的数是250, 存储失败
- 第2次尝试, 目标是37, 当前要存储的数是125, 存储失败
- 第3次尝试, 目标是37, 当前要存储的数是62, 存储失败
- 第4次尝试, 目标是37, 当前要存储的数是31, 存储成功
- 第5次尝试, 目标是6, 当前要存储的数是15, 存储失败
- 第6次尝试, 目标是6, 当前要存储的数是7, 存储失败
- 第7次尝试, 目标是6, 当前要存储的数是3, 存储成功
- 第8次尝试, 目标是3, 当前要存储的数是1, 存储成功
- 第9次尝试, 目标是2, 当前要存储的数是1, 存储成功
- 第10次尝试, 目标是1, 当前要存储的数是1, 存储成功
- $ ./main
- 859
- 第0次尝试, 目标是859, 当前要存储的数是500, 存储成功
- 第1次尝试, 目标是359, 当前要存储的数是250, 存储成功
- 第2次尝试, 目标是109, 当前要存储的数是125, 存储失败
- 第3次尝试, 目标是109, 当前要存储的数是62, 存储成功
- 第4次尝试, 目标是47, 当前要存储的数是31, 存储成功
- 第5次尝试, 目标是16, 当前要存储的数是15, 存储成功
- 第6次尝试, 目标是1, 当前要存储的数是7, 存储失败
- 第7次尝试, 目标是1, 当前要存储的数是3, 存储失败
- 第8次尝试, 目标是1, 当前要存储的数是1, 存储成功
- $ ./main
- 430
- 第0次尝试, 目标是430, 当前要存储的数是500, 存储失败
- 第1次尝试, 目标是430, 当前要存储的数是250, 存储成功
- 第2次尝试, 目标是180, 当前要存储的数是125, 存储成功
- 第3次尝试, 目标是55, 当前要存储的数是62, 存储失败
- 第4次尝试, 目标是55, 当前要存储的数是31, 存储成功
- 第5次尝试, 目标是24, 当前要存储的数是15, 存储成功
- 第6次尝试, 目标是9, 当前要存储的数是7, 存储成功
- 第7次尝试, 目标是2, 当前要存储的数是3, 存储失败
- 第8次尝试, 目标是2, 当前要存储的数是1, 存储成功
- 第9次尝试, 目标是1, 当前要存储的数是1, 存储成功
- $ ./main
- 789
- 第0次尝试, 目标是789, 当前要存储的数是500, 存储成功
- 第1次尝试, 目标是289, 当前要存储的数是250, 存储成功
- 第2次尝试, 目标是39, 当前要存储的数是125, 存储失败
- 第3次尝试, 目标是39, 当前要存储的数是62, 存储失败
- 第4次尝试, 目标是39, 当前要存储的数是31, 存储成功
- 第5次尝试, 目标是8, 当前要存储的数是15, 存储失败
- 第6次尝试, 目标是8, 当前要存储的数是7, 存储成功
- 第7次尝试, 目标是1, 当前要存储的数是3, 存储失败
- 第8次尝试, 目标是1, 当前要存储的数是1, 存储成功
- $
复制代码 |
|