如何防止这个无限循环

问题描述 投票:0回答:3

当我运行以下代码时,如果最高数值等于255,有时会成功退出,有时会进入无限循环。我知道这是因为当255递增并变为0时发生翻转。发生了,但我想建议停止这种情况。我是否应该在末尾放置if语句以检查i是否等于最大数,然后在末尾中断?这似乎是不好的样式,如果我增加变量的大小,很容易忘记进行修复。

    // delete all the files
    for (unsigned char i = 0; i <= highestNum; i++){
        rc = snprintf(formatString, sizeof(formatString), "x%u", i);
        if (rc < 0){
            perror("snprintf in delete");
        }
        rc = unlinkat(directoryFD, formatString, 0);
        if (rc == 0){
            printf("file unlinked\n");
        }
    }
c loops for-loop infinite-loop unsigned-char
3个回答
0
投票
使用unsigned int类型代替unsigned char类型:否则,当i等于该类型的最大值255(UCHAR_MAX is equal to 255)时,i递增后的下一个值将再次为0,并且您将获得无限循环。

0
投票
避免这种情况的一种方法可以是将i声明为int,然后在使用它的循环中将其强制转换为char

0
投票
您可以使用更广泛的类型(例如unsigned int)来执行此操作,并且代码更改最少。另一种选择是使用

different

© www.soinside.com 2019 - 2024. All rights reserved.