排序功能停止工作,没有任何错误 - C
Sort function stops working without any errors - C
此程序正在对数组中的字符串进行排序。
函数 Sort 在第 3 次运行后停止且没有编译错误
int main(){
char * arrP1[] = { "father", "mother", NULL };
char * arrP2[] = { "sister", "brother", "grandfather", NULL };
char * arrP3[] = { "grandmother", NULL };
char * arrP4[] = { "uncle", "aunt", NULL };
char ** arrPP[] = { arrP1, arrP2, arrP3, arrP4 , NULL };
printAllStrings(arrPP);
sort(arrPP);
printAllStrings(arrPP);
return 0;
}
void sort(char ** arrPP[]) {
int i, j, n, pi, pj;
int t;
char * temp;
for (n = 0; n < 8; n++) {
pi = 0;
pj = 0;
printf("round %d\n", n);
for (i = 0; i < (sizeof(arrPP)); i++) {
for (j = 0; arrPP[i][j] != NULL; j++) {
t = 0;
if (i == 0 && j == 0)
continue;
while (1) { // checking wich word is bigger and swiching between them if needed
if (arrPP[pi][pj][t] == arrPP[i][j][t])
continue;
if (arrPP[pi][pj][t] > arrPP[i][j][t]) {
temp = arrPP[pi][pj];
arrPP[pi][pj] = arrPP[i][j];
arrPP[i][j] = temp;
break;
}
else {
break;
}
t++;
}
pi = i;
pj = j;
}
}
}
}
输出口:
(父亲,母亲)
(姐姐,弟弟,爷爷)
(祖母)
(叔叔,阿姨)
第 0 轮
第 1 轮
第 2 轮
预期输出:
(父亲,母亲)
(姐姐,弟弟,爷爷)
(祖母)
(叔叔,阿姨)
第 0 轮
第 1 轮
第 2 轮
第 3 轮
第 4 轮
第 5 轮
第 6 轮
第 7 轮
(阿姨,弟弟)
(父亲、祖父、祖母)
(妈妈)
(siter, uncle)
我 运行 你的代码在调试器中,我并没有真正尝试查看它是否有效,我只是试图找出你得到无限循环的原因。问题在那里:
while (1)
{
if (arrPP[pi][pj][t] == arrPP[i][j][t])
continue;
...
如果比较结果为正,您将进入无限循环。比较祖父和祖母时会发生这种情况。
此程序正在对数组中的字符串进行排序。
函数 Sort 在第 3 次运行后停止且没有编译错误
int main(){
char * arrP1[] = { "father", "mother", NULL };
char * arrP2[] = { "sister", "brother", "grandfather", NULL };
char * arrP3[] = { "grandmother", NULL };
char * arrP4[] = { "uncle", "aunt", NULL };
char ** arrPP[] = { arrP1, arrP2, arrP3, arrP4 , NULL };
printAllStrings(arrPP);
sort(arrPP);
printAllStrings(arrPP);
return 0;
}
void sort(char ** arrPP[]) {
int i, j, n, pi, pj;
int t;
char * temp;
for (n = 0; n < 8; n++) {
pi = 0;
pj = 0;
printf("round %d\n", n);
for (i = 0; i < (sizeof(arrPP)); i++) {
for (j = 0; arrPP[i][j] != NULL; j++) {
t = 0;
if (i == 0 && j == 0)
continue;
while (1) { // checking wich word is bigger and swiching between them if needed
if (arrPP[pi][pj][t] == arrPP[i][j][t])
continue;
if (arrPP[pi][pj][t] > arrPP[i][j][t]) {
temp = arrPP[pi][pj];
arrPP[pi][pj] = arrPP[i][j];
arrPP[i][j] = temp;
break;
}
else {
break;
}
t++;
}
pi = i;
pj = j;
}
}
}
}
输出口:
(父亲,母亲)
(姐姐,弟弟,爷爷)
(祖母)
(叔叔,阿姨)
第 0 轮
第 1 轮
第 2 轮
预期输出:
(父亲,母亲)
(姐姐,弟弟,爷爷)
(祖母)
(叔叔,阿姨)
第 0 轮
第 1 轮
第 2 轮
第 3 轮
第 4 轮
第 5 轮
第 6 轮
第 7 轮
(阿姨,弟弟)
(父亲、祖父、祖母)
(妈妈)
(siter, uncle)
我 运行 你的代码在调试器中,我并没有真正尝试查看它是否有效,我只是试图找出你得到无限循环的原因。问题在那里:
while (1)
{
if (arrPP[pi][pj][t] == arrPP[i][j][t])
continue;
...
如果比较结果为正,您将进入无限循环。比较祖父和祖母时会发生这种情况。