Поиск пустой строки с помощью fscanf

Я должен прочитать некоторые переменные с именами от "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?

1 ответ

Решение

Если это безопасно предположить, что matrix_read_prp_2() Функция оставляет новую строку во входном буфере, тогда можно было бы пересмотреть операции ввода-вывода в конце цикла по следующим строкам:

    // 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 появляется в цикле.

Другие вопросы по тегам