[我正在尝试编写一个接受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;
}
我要做的是扫描整个输入,然后再进行处理。
#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
。您可以执行此操作,因为这样的数组始终存储在一维数组中。但这只是我的懒惰。随时进行更正。
如果这不是您的初衷,或者我犯了一些错误,请随时纠正我。可能误会了一些东西。