为什么我的for循环是无限循环(C)?

时间:2016-02-29 10:18:25

标签: c for-loop infinite-loop

我有这段代码:

#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并逃脱循环?我确定我错过了一些明显的东西。

2 个答案:

答案 0 :(得分:5)

您应该使用i+=LINE代替i=+LINE

答案 1 :(得分:3)

在循环中

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

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