将线性方程组的系数从文件中读取到c中的2d数组中

将线性方程组的系数从文件中读取到c中的2d数组中,c,file,linear-equation,C,File,Linear Equation,我正在编写一个程序,从这样的文件中读取线性方程,并使用矩阵求解: 3x+2y-2z=9 -2x+9y+12z=23 4x-7y+9z=45 该文件应该包含n个带有n个变量的方程,如何仅从上述方程中获取数字和符号以存储在二维动态整数数组中 因此,输出将是(类似于以下内容): 感谢高级使用fscanf,“d”修饰符处理有符号整数,这意味着它将处理输入数字,无论前面是+还是-,请尝试以下代码: #include <stdio.h> int main(void) { int x,

我正在编写一个程序,从这样的文件中读取线性方程,并使用矩阵求解:

3x+2y-2z=9
-2x+9y+12z=23
4x-7y+9z=45
该文件应该包含n个带有n个变量的方程,如何仅从上述方程中获取数字和符号以存储在二维动态整数数组中

因此,输出将是(类似于以下内容):


感谢高级

使用fscanf,“d”修饰符处理有符号整数,这意味着它将处理输入数字,无论前面是
+
还是
-
,请尝试以下代码:

#include <stdio.h>

int main(void) {
    int x, y, z, e;
    FILE *fp = fopen("eq.txt", "r");
    if (!fp)
        return 1;
    while (fscanf(fp, "%dx%dy%dz=%d", &x, &y, &z, &e) == 4) {
        printf("%d %d %d %d\n", x, y, z, e);
    }
    return 0;
}

到目前为止你做了什么?也许您应该搜索
fscanf
开始。请向我们展示您的尝试。提示:
fscanf
fgets
+
sscanf
fscanf
sscanf
都不会从文件中读取系数,例如:fscanf(文件指针,“%d”,&coff);另外,如果我使用:fscanf(filePointer,“%s,%d”,symbols,&coff)symbol读取所有行,而coff也不读取系数,我认为这是因为方程是一个没有空格的字符序列。。。所以这不正确,我理解错了什么吗@CoolGuy@Islams使用
if(fscanf(filePointer,“%dx%dy%dz=%d”,&x,&y,&z,&ans)==4{/*Success!*/}否则{/*Failed!*/}
非常感谢@CoolGuy,Thnaks非常感谢@flutri有3个问题@fluter:(第一)为什么在这里写x,y,z“%dx%dy%dz=%d”而不是“%d%d=%d”。。。(第二)格式中“=”运算符的重要性。。。。(第三)如何从文件中读取n个方程?@Islams格式字符串应该与实际输入文件匹配,您的文件没有空格,并且中间包含一个“=”,这就是为什么它是这样的。现在它读取整个文件,如果你想先读取n,你可以做
for(I=0;iThanks很多@fluter…让我只澄清问题编号(三)…在
线性方程组中
行数=未知变量数..我想更新我的文件以读取第一行中的
n
,这意味着:(n=5)我有5个方程,每个方程中有5个相同的变量来解这个方程…我能做什么来在一行中读取n个变量…然后读取n个方程也会很容易?谢谢advanced@Islams在这种情况下,您可以使用
fscanf(“%d”,&n,fp)首先读取编号
n
)
然后通过0到n的循环读取之后的所有n行。
#include <stdio.h>

int main(void) {
    int x, y, z, e;
    FILE *fp = fopen("eq.txt", "r");
    if (!fp)
        return 1;
    while (fscanf(fp, "%dx%dy%dz=%d", &x, &y, &z, &e) == 4) {
        printf("%d %d %d %d\n", x, y, z, e);
    }
    return 0;
}
3 2 -2 9
-2 9 12 23
4 -7 9 45