Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的for循环是无限循环(C)?_C_For Loop_Infinite Loop - Fatal编程技术网

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

为什么我的for循环是无限循环(C)?,c,for-loop,infinite-loop,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 =$

我有一段代码:

#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");
    }
}
#包括
#包括
#包括
#定义数据大小25
#定义第10行
#定义行中的字节((int)10)
#定义地址列宽度((int)(2*sizeof(void*)-2)//地址的字符大小=$
#定义字节列宽度((int)(字节行*3)-1)//1字节是2个十六进制字符+s$
#定义列分隔符“”
int main(){
typedef无符号字符字节;
字节数据[数据大小];
int i;
int j;
整数余数=数据大小%行;
//打印表格标题
printf(“\n%-*s”,地址栏宽,“地址”);
printf(“%s”,列分隔符);
printf(“%-*s”,字节\列\宽度,“字节”);
printf(“%s”,列分隔符);
printf(“%-*s\n”,字节,行,字符);
对于(i=0;i

出于某种原因,我的第四个For循环一直在循环。变量
i
保持
10
。。。为什么它不递增,变成
20
,并跳出循环?我确信我遗漏了一些明显的东西。

你应该在循环中使用
I+=LINE
而不是
I=+LINE

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

for(i=0;i)您的缩进样式是灾难性的。使用经典的一致样式可获得更好的可读性和更少的错误。在诸如
=
之类的二进制运算符周围添加空格会使错误变得明显:
i=+LINE
而不是
i+=LINE