有人能告诉我为什么我的chain1在第二次使用时突然打印出99吗?:)

有人能告诉我为什么我的chain1在第二次使用时突然打印出99吗?:),c,C,有人能告诉我为什么chain1打印99吗 我想做的就是在if条件完成后,用chain3交换chain1,但是chain1突然跳到99,我真的不知道为什么。我甚至改变了我的其他字符串,结果很好。 对于这种情况,请键入a3,然后键入c3,以将chain1与chain3交换 #include <stdio.h> #include <stdlib.h> #define R 3 #define C 3 #include <time.h> #define S 100 i

有人能告诉我为什么chain1打印99吗

我想做的就是在if条件完成后,用chain3交换chain1,但是chain1突然跳到99,我真的不知道为什么。我甚至改变了我的其他字符串,结果很好。 对于这种情况,请键入
a3
,然后键入
c3
,以将chain1与chain3交换

#include <stdio.h>
#include <stdlib.h>
#define R 3
#define C 3
#include <time.h>
#define S 100

int main()
{
    char CHAINASK[S];

    int index = 0;
    int z = 0;
    int Z = 0;

    char CHAIN1[S];
    char CHAIN2[S];
    char CHAIN3[S];
    char CHAIN4[S];
    char CHAIN5[S];
    char CHAIN6[S];
    char CHAIN7[S];
    char CHAIN8[S];
    char CHAIN9[S];

    int a, b;

    int c, n;

    ///random maker
    srand(time(NULL));
    for (c = 1; c <= 1; c++)
    {
        n = rand() % 4 + 1;
        printf("%d\n", n);
    }

    printf("\n");
    printf("\n");
    CHAIN1[S] = rand() % 4 + 1;
    CHAIN2[S] = rand() % 4 + 1;
    CHAIN3[S] = rand() % 4 + 1;
    CHAIN4[S] = rand() % 4 + 1;
    CHAIN5[S] = rand() % 4 + 1;
    CHAIN6[S] = rand() % 4 + 1;
    CHAIN7[S] = rand() % 4 + 1;
    CHAIN8[S] = rand() % 4 + 1;
    CHAIN9[S] = rand() % 4 + 1;

    int q[R][C] = {CHAIN1[S], CHAIN2[S], CHAIN3[S], CHAIN4[S], CHAIN5[S], CHAIN6[S], CHAIN7[S], CHAIN8[S], CHAIN9[S]};

    for (a = 0; a < R; a++)
    {
        for (b = 0; b < C; b++)
        {
        }
    }

    // PRINTS THE TABLE
    for (a = 0; a < R; a++)
    {
        printf("\n");
        for (b = 0; b < C; b++)
        {
            printf("%d,", q[a][b]);
        }
    }
    printf("\n");
    printf("\n");

////////////////////////////////
// the comparer
////////////////////////////////

    printf("Escriba su coordenada\n");
    scanf("%s", CHAINASK);
    printf("\n");
    printf("\n");

    if (strcmp(CHAINASK, "a3") == 0)
    {
        printf("eligio la casilla a3");
        printf("\n");
        printf("\n");
        printf("Escriba su coordenada\n");
        scanf("%s", CHAINASK);
        printf("\n");
        printf("\n");
        if (strcmp(CHAINASK, "c3") == 0)
        {
            printf("eligio la casilla c3");
            printf("\n");
            printf("\n");

            // THE SWAP OCCURS

            int q[R][C] = {CHAIN1[S], CHAIN2[S], CHAIN3[S], CHAIN4[S], CHAIN5[S], CHAIN6[S], CHAIN9[S] CHAIN7[S], CHAIN8[S], };

            for (a = 0; a < R; a++)
            {
                for (b = 0; b < C; b++)
                {
                }
            }
            // PRINTS THE TABLE
            for (a = 0; a < R; a++)
            {
                printf("\n");
                for (b = 0; b < C; b++)
                {
                    printf("%d,", q[a][b]);
                }
            }
        }
    }

    if (strcmp(CHAINASK, "b3") == 0)
    {
        printf("eligio la casilla b3");
    }
    else
    {
        printf("no valid coordinate was introduced");
    }
}
#包括
#包括
#定义R3
#定义c3
#包括
#定义S 100
int main()
{
(S);
int指数=0;
int z=0;
int Z=0;
字符链1[S];
字符链2[S];
字符链3[S];
字符链4[S];
字符链5[S];
字符链6[S];
字符链7[S];
字符链8[S];
字符链9[S];
INTA,b;
int c,n;
///随机制造者
srand(时间(空));

对于(c=1;c而言,问题在于您正在访问位置S=100CHAIN1[100]中的CHAINx, 您的CHAINx声明为char CHAIN1[S]CHAIN1[100],这意味着您在读取或写入CHAINx时的索引不得高于99,例如CHAIN[99]

一种修复方法是将您的链声明为char链[S+1],这里是修复代码

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


#define R 3
#define C 3
#define S 100
int main()
{
char CHAINASK[S+1];

int index = 0;
int z = 0;
int Z = 0;

char CHAIN1[S+1];
char CHAIN2[S+1];
char CHAIN3[S+1];
char CHAIN4[S+1];
char CHAIN5[S+1];
char CHAIN6[S+1];
char CHAIN7[S+1];
char CHAIN8[S+1];
char CHAIN9[S+1];

int a, b;

int c, n;

///random maker
srand(time(NULL));
for (c = 1; c <= 1; c++)
{
    n = rand() % 4 + 1;
    printf("%d\n", n);
}

printf("\n");
printf("\n");
CHAIN1[S] = rand() % 4 + 1;
CHAIN2[S] = rand() % 4 + 1;
CHAIN3[S] = rand() % 4 + 1;
CHAIN4[S] = rand() % 4 + 1;
CHAIN5[S] = rand() % 4 + 1;
CHAIN6[S] = rand() % 4 + 1;
CHAIN7[S] = rand() % 4 + 1;
CHAIN8[S] = rand() % 4 + 1;
CHAIN9[S] = rand() % 4 + 1;

int q[R][C] = {CHAIN1[S], CHAIN2[S], CHAIN3[S], CHAIN4[S], CHAIN5[S], CHAIN6[S], CHAIN7[S], CHAIN8[S], CHAIN9[S]};

for (a = 0; a < R; a++)
{
    for (b = 0; b < C; b++)
    {
    }
}

// PRINTS THE TABLE
for (a = 0; a < R; a++)
{
    printf("\n");
    for (b = 0; b < C; b++)
    {
        printf(" %d[%d,%d] , ", q[a][b],a,b);
    }
}
printf("\n");
printf("\n");

// the comparer


printf("Escriba su coordenada\n");
scanf("%s", CHAINASK);
printf("\n");
printf("\n");

if (strcmp(CHAINASK, "a3") == 0)
{
    printf("eligio la casilla a3");
    printf("\n");
    printf("\n");
    printf("Escriba su coordenada\n");
    scanf("%s", CHAINASK);
    printf("\n");
    printf("\n");

    if (strcmp(CHAINASK, "c3") == 0)
    {
        printf("eligio la casilla c3");
        printf("\n");
        printf("\n");

        // THE SWAP OCCURS

        int qd[R][C] = {CHAIN1[S], CHAIN2[S], CHAIN3[S],  CHAIN4[S], CHAIN5[S], CHAIN6[S],CHAIN9[S], CHAIN7[S], CHAIN8[S], };

        for (a = 0; a < R; a++)
        {
            for (b = 0; b < C; b++)
            {
            }
        }
        // PRINTS THE TABLE
        for (a = 0; a < R; a++)
        {
            printf("\n");
            for (b = 0; b < C; b++)
            {
                printf(" %d [%d,%d] , ", qd[a][b],a,b);
            }
        }
    }
}

if (strcmp(CHAINASK, "b3") == 0)
{
    printf("eligio la casilla b3");
}
else
{
    printf("no valid coordinate was introduced");
}
}
#包括
#包括
#包括
#包括
#定义R3
#定义c3
#定义S 100
int main()
{
字符链任务[S+1];
int指数=0;
int z=0;
int Z=0;
字符链1[S+1];
字符链2[S+1];
字符链3[S+1];
字符链4[S+1];
字符链5[S+1];
字符链6[S+1];
字符链7[S+1];
字符链8[S+1];
字符链9[S+1];
INTA,b;
int c,n;
///随机制造者
srand(时间(空));

对于(c=1;c有两个地方似乎有空的内环体。它们使内环不相关,而这又使外环不相关。那么,你打算在这些空的内环中放什么?我无法复制/生成你所说的问题。我运行代码并输入“a3”和“c3”,但我不是g在任何地方设置“99”。你说的“chain1突然跳到99”是什么意思?它工作起来就像我想要的一样:D非常感谢我在这上面停留了一段时间,现在这看起来不错,但我想知道OP是否仍然有一些误解。不清楚为什么他声明101个字符的数组,然后只使用最后一个索引。确实,有很多不清楚的部分,比如e空嵌套for循环。