我应该阅读一些从“A”到“Z”的变量,然后对它们进行评估。变量中的值是矩阵。这是示例输入:
// 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
,但它实际上会跳过第二行并读取{{1}}。
如何在C中检查下一行是否为空?
答案 0 :(得分: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);
函数调用; <{1}}和mgr
都不会出现在循环中。