我试图在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命令。
答案 0 :(得分:1)
读取多行的典型C程序看起来像这样:
char line[MAX_LINE_SIZE];
while (fgets(line, sizeof(line), inputFile) != NULL)
{
/* Do something with line */
}
“做线路做事”的部分是你应该做的事情。在你的情况下要做的一件事是解析该行,并获得其中一个数字。哪一个取决于行号(你必须跟踪你的自己),所以第一行的第一个数字,第二行的第二个数字等等。然后当你有所有数字时(即当循环时)结束)你用数据做你想做的事。
答案 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;
}