C - 关于EOF功能

时间:2014-04-06 18:15:16

标签: c file-io matrix

我试图在C中使用文件输入,主要是矩阵格式的整数值。例如,如果我有一个像......这样的文件。

4 5 7 3
6 8 5 2
5 7 3 4
9 4 8 7

我很担心EOF命令会做什么。我知道我可以用它来检查文件的结尾,但如果我想测试一行的结尾怎么办?如果我想从右到左打印对角线怎么办(3,5,7,9)。我知道我必须逐行进行,设置一个计数器,在每次迭代时计算以查找行的长度,打印出该行的最后一个值,然后将指针扣除1并转到下一行。但是我怎么能这样做呢?如在,EOF仅用于整个文件,或者是否有可以更直接定义行长度等的C命令。

3 个答案:

答案 0 :(得分:1)

读取多行的典型C程序看起来像这样:

char line[MAX_LINE_SIZE];
while (fgets(line, sizeof(line), inputFile) != NULL)
{
    /* Do something with line */
}

“做线路做事”的部分是你应该做的事情。在你的情况下要做的一件事是解析该行,并获得其中一个数字。哪一个取决于行号(你必须跟踪你的自己),所以第一行的第一个数字,第二行的第二个数字等等。然后当你有所有数字时(即当循环时)结束)你用数据做你想做的事。

循环结束后,您可以使用feofferror查看是否由于文件结尾或错误而结束。

答案 1 :(得分:0)

扫描文件时,您可以通过在\n标记上拆分文件将文件分隔为行。这是一个换行符,出现在每一行的末尾。此外,您可以拆分\t令牌。这代表一个标签。

答案 2 :(得分:0)

#include <stdio.h>
#include <ctype.h>

#define MAX_DIGIT_OFLINE 10
#define EOR '\n' //END OF ROW

int main(){
    char digits[MAX_DIGIT_OFLINE];
    FILE *fp;
    fp = fopen("data.txt", "r");
    int n=0,last=-1;

    for(;;){
        int ch = fgetc(fp);
        if(isdigit(ch)){
            digits[n++] = ch;
        } else if(ch == EOR || ch == EOF){
            last = (last==-1) ? n -1: last -1;
            putchar(digits[last]);
            if(ch == EOF) break;
            n = 0;
        }
    }
    fclose(fp);
    putchar(EOR);

    return 0;
}