使用 fscanf 查找空行
Finding empty line using 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 中流中的下一行是否为空?
如果假设 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
都没有出现在循环中。
我应该读取一些从 "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 中流中的下一行是否为空?
如果假设 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
都没有出现在循环中。