C 0 - 1 不等于负1
本帖最后由 ing 于 2020-3-27 15:43 编辑刚开始 (最后一次循环) i:0 - 1 不等于-1(等于4....),清理缓存重启Clion;
但发现实现功能正常,运行却没有任何输出(可能是 i 的值导致);
当我把
```
size_t i = d; i >= 0; i--
```
改为
```
size_t i = d; i > -1; --i
```
再次调试后发现不会执行断点除的方法(直接停在 } 的位置)
我不知道这是为什么了,C 真是个神奇的东西
________________________________________________________________________________________
今天再次运行发现又可以了,但是 i 为 0 的时候执行 i-- 不等于 -1,导致没有退出循环和因为 i 值过大使程序异常
我换了个编译器,然而并没有解决我的问题....
注意 i 值的变化,减1没有变成-1,因此继续进入循环体
```
#include <stdio.h>
#include <stdlib.h>
#define MAX 15
typedef struct
{
int r;
int length;
}SqList;
void shellInsert(SqList *l, int dk)
{
for (size_t i = dk + 1; i <= l->length; i++)
{
if (l->r < l->r)
{
int j = 0;
l->r = l->r;
for (j = i - dk; j > 0 && (l->r < l->r); j-=dk)
{
l->r = l->r;
}
l->r = l->r;
}
}
}
void shellSort(SqList *l,int d)
{
//分割的常量
int dk = 0;
for (size_t i = d; i >= 0; i--)
{
dk = 2 * i + 1;
shellInsert(l,dk);
}
}
int main(int argc, char* argv[])
{
SqList *l = (SqList*)malloc(sizeof(SqList));
l->r = 49;
l->r = 38;
l->r = 64;
l->r = 97;
l->r = 76;
l->r = 13;
l->r = 27;
l->r = 49;
l->r = 55;
l->r = 4;
l->length = 10;
//增量
int d = 2;
shellSort(l,d);
for (size_t i = 1; i <= l->length; i++)
{
printf("%2d", l->r);
}
return 0;
}
``` size_t是标准C库中定义的,在64位系统中为long long unsigned int,非64位系统中为long unsigned int。
既然是 unsigned 无符号数,0-1当然不能得到-1啦~
建议尝试把 for (size_t i …… 改为 for (int i …… {:301_1001:} shellInsert(l,dk);中,dk传入的值越来越大,dk的值控制shellInsert中的循环次数,递归造成函数陷入死循环,无法执行到你的输出函数
页:
[1]