将整数之间的逗号扫描成2d数组的问题扫描整数

问题描述 投票:0回答:1

[我正在尝试编写一个接受axb形式的二维矩阵的C程序:{{a,b,c},{d,e,f} ...}其中a确定行数和b确定列数,子单元{}声明行,行元素声明为{}之间的a,b,c...。问题在于程序仅接受元素之间没有逗号的矩阵,因此仅以axb:{{a b c},{d e f} ...}}格式的矩阵起作用。我希望程序能够接受变量之间用逗号分隔的输入。这是供参考的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {
    int a,b;
    scanf("%dx%d:{", &a, &b);
    int matrix[a][b];
    int r,c;
    for (r = 0; r < a; r++) {
        scanf("{%d", &matrix[r][0]);
        for(c = 1; c < (b -1); c++) {
            scanf("%d", &matrix[r][c]);
        }
        scanf("%d},", &matrix[r][c]); 
    }
    printf("%dx%d:{", b, a);
    for (c = 0; c < (b - 1); c++) {
        printf("{");
        for(r = 0; r < (a - 1); r++) {
            printf("%d,",matrix[r][c]);
        }
        printf("%d",matrix[r][c]);
        printf("},");
    }
    printf("{");
    for(r = 0; r < 3; r++) { 
        printf("%d,",matrix[r][c]);
    }
    printf("%d",matrix[r][c]);
    printf("}");
    printf("}\n");
    return 0;
}
c arrays scanf
1个回答
0
投票

我要做的是扫描整个输入,然后再进行处理。

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


int main()
{
    // scan the input matrix
    int a, b;
    char input[256];
    scanf("%dx%d:%256[^\n]", &a, &b, input);

    int mat[a][b];

    // populate matrix:
    char* p = input;
    int i = 0;
    while (p != input + 256)
    {
        // scan until the character is not a separator
        if (*p == '{' || *p == '}' || *p == ',')
        {
            ++p;
        }
        else
        {
            int n;
            sscanf(p, "%d", &n);
            mat[0][i] = n;
            ++i;

            // scan until we find a separator character
            while (p != input + 256 && (*p != '{' && *p != '}' && *p != ','))
            {
                ++p;
            }

            if (i >= a*b)
                break;
        }
    }
    printf("your matrix:\n");
    for (i = 0; i < a*b; ++i)
    {
        if (i % b == 0)
            printf("\n");

        printf("%d ", mat[0][i]);
    }
    printf("\n");

    return 0;
}

示例输入和输出:输入:3x2:{{a, b},{c, d},{e, f}}

输出:

a b
c d
e f

其中a,b,c,d,e和f是数字(很好,整数)。

但是,这可能不是一个很好的解决方案,但是它可以满足您的要求。至少它可以给您一些想法。希望这会有所帮助。

注意:索引数组时,我使用了单个索引i。您可以执行此操作,因为这样的数组始终存储在一维数组中。但这只是我的懒惰。随时进行更正。

如果这不是您的初衷,或者我犯了一些错误,请随时纠正我。可能误会了一些东西。

© www.soinside.com 2019 - 2024. All rights reserved.