C 关于EOF函数
我试图用C语言处理文件输入,主要是矩阵格式的整数值。例如,如果我有一个像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命令可以更直接地定义
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'
,或空格,由空格表示。:)