C for循环超出其限制

C for循环超出其限制,c,for-loop,C,For Loop,我正在尝试编写playfair密码测试代码,我想将字母排列成矩阵格式,从左上角到右下角对角填充矩阵。我在逻辑上考虑数组的[0][0]索引对应于矩阵的最左上角 代码如下: #include <stdio.h> #include <string.h> char key[5][5]; void gen_key(char* key_string) { int i,j,k,p=0; if(strlen(key_string)<24) {

我正在尝试编写playfair密码测试代码,我想将字母排列成矩阵格式,从左上角到右下角对角填充矩阵。我在逻辑上考虑数组的[0][0]索引对应于矩阵的最左上角

代码如下:

#include <stdio.h>
#include <string.h>

char key[5][5];

void gen_key(char* key_string)
{
    int i,j,k,p=0;
    if(strlen(key_string)<24)
    {
        printf("key too short\n");
        exit(-1);
    }
    for(i=0;i<5;i++)
    {
        for(j=0,k=i;j<5,k>-1;k--,j++)
        {
            key[k][j]=key_string[p++];
        }
    }
    for(j=1;j<5;j++)
    {
        printf("j=%d\n",j);
        for(k=j,i=4;k<5,i>0;i--,k++)
        {
            printf("placing %c at %d %d\n",key_string[p],i,k);
            key[i][k]=key_string[p++];
        }
    }
}

void print_key()
{
    int i,j;
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            printf("%c ",key[i][j]);
        }
        printf("\n");
    }
}

int main()
{
    gen_key("LQGUMDXRHBZVNEAYSICWOFTKP");
    print_key();
    return 0;
}

我不明白为什么要把T放在15,我已经提到过,如果你想要两个条件都为真,在第二个for循环中,k的值

j<5,k>-1
使用&&运算符,而不是逗号

j<5 && k>-1

在以逗号分隔的列表中,逗号只生成最后一个值,因此在代码中实际上只使用了第二个条件k>-1。

逗号在C中也是一个运算符,但它没有执行您认为它会执行的操作。:


对于j=0,k=i;j-1;k-,j++是您所需要的。

不要将逗号表达式作为循环不变量。这几乎肯定不是你想要的。你想用j-1表示什么条件?为什么要用逗号?逗号容易混淆和误解。我误解了for循环定义中逗号分隔的条件被视为连词:
j<5 && k>-1