在c代码的for循环中重置变量

时间:2014-08-26 21:01:56

标签: c pointers for-loop

我正在尝试编写一些C代码来增加IP地址。我希望其中一个变量“j”在达到256后重置为0,因为每个八位字节只有255个ip地址。我的问题是我似乎无法将“j”设置为0.任何想法我做错了什么?

int main()
{

    int breakCount = 300;

    int j = 0;
    int x = 0;

    for(int i = 0; i < breakCount; i++) 
    {
        printf("class-map type traffic match-all cm%d\n",i);
        printf("match source-address ipv4 100.%d.%d.0\n",x,j);

        j++;

        if (j == 256)
        {
            x++;

            int j = 0;
        }
    }

    return 0;
}

/ * code snip output * /

match source-address ipv4 100.0.253.0
class-map type traffic match-all cm254
match source-address ipv4 100.0.254.0

class-map type traffic match-all cm255
match source-address ipv4 100.0.255.0

class-map type traffic match-all cm256
match source-address ipv4 100.1.256.0

class-map type traffic match-all cm257
match source-address ipv4 100.1.257.0

6 个答案:

答案 0 :(得分:6)

从重置它的int中删除int j = 0;(在循环中),因为现在你创建一个局部变量而不是使用之前声明的变量。

答案 1 :(得分:4)

你试过给j分配零吗?

if (j == 256)
{
    x++;

    j = 0;
}

答案 2 :(得分:0)

看起来你正在增加单个八位字节。将点分的IPv4字符串首先转换为单个32位无符号整数然后递增会更好。

答案 3 :(得分:0)

重置变量的另一种方法是:

j = j %256;
if (j == 0) {
   x++
}

答案 4 :(得分:0)

/* 一些函数比如重置 vars printf 可能会这样做。你应该制作一个数组而不是打印它。 */ int main() {

int breakCount = 300;
int j = 0;
int x = 0;
int list_[breakCount][2];

for(int i = 0; i < breakCount; i++) {

    list_[i][0] = x;
    list_[i][1] = j;

    j++;

    if (j == 256)
    {
        x++;

        int j = 0;
    }
}

for (int i = 0; i < breakCount; i++) {
    printf("class-map type traffic match-all cm%d\n", i);
    printf("match source-address ipv4 100.%d.%d.0\n", list_[i][0], list_[i][1]);
}

return 0;

}

答案 5 :(得分:-1)

提示:您可以尝试将其分为两个循环:

for(int i = 0; i < 256; i++) 

for(int i = 256; i < 300; i++) 

在这两种情况下,将j初始化为0。