【问题标题】:Why is my for loop an infinite loop (C)? [closed]为什么我的 for 循环是一个无限循环 (C)? [关闭]
【发布时间】:2023-04-03 16:18:01
【问题描述】:

我有这段代码:

#include <stdio.h>
#include <ctype.h>
#include <unistd.h>

#define DATA_SIZE 25
#define LINE 10

#define BYTES_A_ROW         ((int)10)
#define ADDR_COLUMN_WIDTH   ((int)(2 * sizeof(void *)) - 2)  //char size of an address =$
#define BYTE_COLUMN_WIDTH   ((int)(BYTES_A_ROW * 3) - 1) // 1 bytes is 2 hex chars + s$
#define COLUMN_SEPARATOR    " "

int main() {
    typedef unsigned char byte_t;
    byte_t data[DATA_SIZE];
    int i;
    int j;
    int remainder = DATA_SIZE % LINE;

    // print table header
    printf("\n%-*s", ADDR_COLUMN_WIDTH, "Address");
    printf("%s", COLUMN_SEPARATOR);
    printf("%-*s", BYTE_COLUMN_WIDTH, "Bytes");
    printf("%s", COLUMN_SEPARATOR);
    printf("%-*s\n", BYTES_A_ROW, "Chars");

    for (i = 0; i < ADDR_COLUMN_WIDTH; i++)
        printf("-");
    printf("%s", COLUMN_SEPARATOR);
    for (i = 0; i < BYTE_COLUMN_WIDTH; i++)
        printf("-");
    printf("%s", COLUMN_SEPARATOR);
    for (i = 0; i < BYTES_A_ROW; i++)    // number of chars is char-column is exactly$
        printf("-");
    printf("\n");

    for (i = 0; i < DATA_SIZE - remainder; i = +LINE) {
        printf("%p ", (void*)&data[i]);
        for (j = i; j < i + LINE; j++) {
            printf("%02x ", data[j]);
        }
        for (j = i; j < i + LINE; j++) {
            if (isprint(data[j])) {
                printf("%c", data[j]);
            } else {
                printf(".");
            }
        }
        printf("\n");
    }
}

由于某种原因,我的第四个 for 循环一直在循环。变量i 保持10... 为什么它不递增所以变成20 并转义循环?我确定我遗漏了一些明显的东西。

【问题讨论】:

  • 你的缩进风格是灾难性的。使用经典一致的样式以获得更好的可读性和更少的错误。在诸如= 这样的二元运算符周围添加空格使错误变得明显:i = +LINE 而不是i += LINE

标签: c for-loop infinite-loop


【解决方案1】:

您应该使用i+=LINE 而不是i=+LINE

【讨论】:

    【解决方案2】:

    在循环中

    for(i=0; i<DATA_SIZE-remainder; i=+LINE)   
    

    您在每次迭代中将LINE 分配给i+ in +LINE 是一元 + 运算符。
    您需要将i=+LINE 更改为i += LINE 以在每次迭代中将i 增加LINE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-27
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多