0

我应该读取一些从“A”到“Z”命名的变量,然后评估它们。变量中的值是矩阵。这是示例输入:

B=[5 2 4; 0 2 -1; 3 -5 -4]
E=[-6 -5 -8; -1 -1 -10; 10 0 -7]
R=[-1 -7 6; -2 9 -4; 6 -10 2]

R+E+B

我编写了一个可以正确读取所有变量的算法。但是我无法检测到空行。我写了这个:

// FILE* input = stdin; 
while(true) {
    char name = '#';
    // Reads the matrix, returns null on error
    Matrix* A = matrix_read_prp_2(input, &name);
    if( A==NULL ) {
        // throw error or something
    }
    // Print the matrix
    matrix_print_prp_2(A, stdout);
    // consume one new line
    char next;
    if(fscanf(input, "\n%c", &next)!=1)
        // Program returns error here
    if(next=='\n')
        break;
    // if not new line, put the char back
    // and continue
    ungetc(next, input);
}

我假设对于空行,fscanf(input, "\n%c", &next)会读'\n'next,但实际上它会跳过第二行并读取R.

如何检查 C 中流中的下一行是否为空?

4

1 回答 1

1

如果可以安全地假设matrix_read_prp_2()函数将换行符留在输入缓冲区中,则可以按照以下几行修改循环尾部的 I/O 操作:

    // Read anything left over to end of line
    int c;
    while ((c = getc(input)) != EOF && c != '\n')
        ;
    // Break on EOF or second newline
    if (c == EOF || (c = getc(input)) == EOF || c == '\n')
        break;
    // if not new line, put the char back and continue
    ungetc(c, input);
}

未经测试的代码。

我不清楚在什么情况下nasrat(mgr, op);应该进行函数调用;既不mgr也不op出现在循环中。

于 2016-11-27T03:09:06.623 回答