C 关于EOF函数

C 关于EOF函数,c,file-io,matrix,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命令可以更直接地定义

我试图用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命令可以更直接地定义行长度等等

扫描文件时,您可以通过在
\n
标记上拆分文件来将文件分隔为多行。这是一个新行,出现在每一行的末尾。此外,您还可以使用
\t
令牌进行拆分。这表示一个选项卡。

读取多行的典型C程序如下所示:

char line[MAX_LINE_SIZE];
while (fgets(line, sizeof(line), inputFile) != NULL)
{
    /* Do something with line */
}
说“用线条做点什么”的部分是你应该做点什么的地方。在您的案例中,要做的一件事是解析该行,并获取其中的一个数字。哪一个取决于行号(您必须跟踪自己的行号),因此第一行的第一个号码,第二行的第二个号码,等等。然后当您拥有所有号码时(即循环结束时),您可以对数据执行您想要的操作

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

\include
#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;
}
#包括 #定义第10行的最大位数 #定义EOR'\n'//行的末尾 int main(){ 字符位数[行的最大位数]; 文件*fp; fp=fopen(“data.txt”,“r”); int n=0,last=-1; 对于(;;){ int ch=fgetc(fp); if(isdigit(ch)){ 数字[n++]=ch; }else if(ch==EOR | | ch==EOF){ last=(last==-1)?n-1:last-1; putchar(数字[最后]); 如果(ch==EOF)中断; n=0; } } fclose(fp); putchar(EOR); 返回0; }
没有
EOF
命令或功能。你是说?stdio.h的可能副本将
EOF
定义为宏。某些函数返回的特殊值
-1
表示文件结束。@来宾注:C将
EOF
定义为“…,类型为
int
,负值为
”,不一定是
-1`。行尾:
'\n'
,或空格,由空格表示。:)