0

開発するプログラムがありますが、一部で問題が発生しています。行われるいくつかのテスト ( ) を読まなければtなりません。その後n、正方行列² (nxn) を作成するために、( ) 個の列と行を読み取る必要があります。マトリックスのインスタンスの後、プログラムはユーザーの入力からそれを設定する必要があります。ユーザーは.bまたはを入力しwます。このパターンに基づいて、マトリックスに入力する必要があります。ユーザーが入力する各行には、n文字 ( .bまたはw) が含まれている必要があり、n 回入力します。これにより、行列が埋められます (n 文字 x n 行)。手を貸してくれませんか?

これは私が持っているコードです:

int main(void)
{
    //vars
    int n = 0, t = 1, x = -1, y = -1, teste = 1;
    int i,j;
    //Start
    scanf(" %d %*c",&t);//scans t
    while (t-- > 0) {
        scanf(" %d", &n);//scans n
        if(n>0 && n < 100){
            int table[n][n];//the matrix n x n
            for (i = 0; (i < n);++i) {//iterator to lines
                char l[n];
                scanf ("%s", l); //scans a line
                for (j = 0; j < n; ++j) {//iterator to colums
        //these ifs are to identfy the input
                   if (l[j] == 'b'){
                        table[i][j]=1;
                    }else if(l[j] == 'w'){
                        table[i][j]=2;
                        x=j;y=i;
                    }else{
                        table[i][j]=0;
                    }
                }
        }
    }
    return 0;
}

Javaでまったく同じものを作成しましたが、うまくいきました。どこで失敗していますか?

4

1 に答える 1

1

変数lには、文字列の末尾に null を格納するための十分なスペースがありません。したがって、他の変数にオーバーフローしており、あらゆる種類のものに影響を与えている可能性があります.

おそらく、行をはるかに大きな文字列に読み込んで、正しい長さであることを確認する必要があります。また、各読み取り操作でエラーをチェックする必要があります。入力の無効な文字も報告する必要があります。

このコードは私にとってはうまくいきます。データをエコーする方法に注意してください。何が問題なのかを確認できます。エラー報告は実際には標準エラーにすべきです。私は怠惰でした。

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

static void dump_board(FILE *fp, const char *tag, int n, int table[n][n])
{
    fprintf(fp, "%s: (%d x %d)\n", tag, n, n);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (table[i][j] == 0)
                putc('=', fp);
            else if (table[i][j] == 1)
                putc('B', fp);
            else if (table[i][j] == 2)
                putc('W', fp);
            else
                putc('?', fp);
        }
        putc('\n', fp);
    }
}

int main(void)
{
    int n = 0, t = 1, x = -1, y = -1;

    if (scanf(" %d %*c", &t) != 1)
    {
        printf("Failed to read t\n");
        return 1;
    }
    printf("%d data sets\n", t);

    while (t-- > 0)
    {
        if (scanf(" %d", &n) != 1)
        {
            printf("Failed to read n\n");
            return 1;
        }

        printf("Size of data set: %d x %d\n", n, n);
        int c;
        while ((c = getchar()) != EOF && c != '\n')
            ;

        if (n > 0 && n < 100)
        {
            int table[n][n];
            for (int i = 0; i < n; i++)
            {
                char line[4096];
                if (fgets(line, sizeof(line), stdin) == 0)
                    break;
                int len = strlen(line);
                if (line[len-1] != '\n')
                {
                    printf("Format error: line too long (%d bytes)\n", len);
                    return 1;
                }
                line[--len] = '\0';
                if (len != n)
                {
                    printf("Format error: line <<%s>> is not length %d\n", line, n);
                    return 1;
                }
                for (int j = 0; j < n; ++j)
                {
                    if (line[j] == 'b')
                        table[i][j] = 1;
                    else if (line[j] == 'w')
                    {
                        table[i][j] = 2;
                        x = j;
                        y = i;
                    }
                    else if (line[j] == '.')
                        table[i][j] = 0;
                    else
                    {
                        printf("Format error: invalid character %c\n", line[j]);
                        return 1;
                    }
                }
            }
            dump_board(stdout, "Input", n, table);
            printf("Last white piece at (%d,%d)\n", x, y);
        }
    }
    return 0;
}

入力

2x
4
b..w
.bw.
.b.b
w.w.
8
b.w.b.w.
.w.b.w.b
bbwwbbww
b......w
ww....bb
bwb..wbw
bbbbwwww
........

出力

2 data sets
Size of data set: 4 x 4
Input: (4 x 4)
B==W
=BW=
=B=B
W=W=
Last white piece at (2,3)
Size of data set: 8 x 8
Input: (8 x 8)
B=W=B=W=
=W=B=W=B
BBWWBBWW
B======W
WW====BB
BWB==WBW
BBBBWWWW
========
Last white piece at (7,6)
于 2013-04-19T04:09:09.093 に答える