使用fscanf查找空行

时间:2016-11-27 01:58:24

标签: c scanf stdio ungetc

我应该阅读一些从“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中检查下一行是否为空?

1 个答案:

答案 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都不会出现在循环中。