Поиск пустой строки с помощью 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
появляется в цикле.