【发布时间】:2016-06-14 14:56:35
【问题描述】:
我在 StackOverflow 和其他网站上找了一天左右,但找不到解决问题的方法。有一些是相似的,但我似乎无法让它们工作。
我有一个制表符分隔的 .txt 文件。一行包含一个标题,之后的 500 行依次包含一个整数、一个整数、一个浮点数、一个整数和一个整数。我有一个函数应该从每一行读取第一个和第三个值(第一个整数和浮点数)。它跳过第一行。这是在一个 do-while 循环中,因为我需要能够处理不同长度的文件。但是,它陷入了循环。我将其设置为输出平均值,但它只会永远输出零。
void HISTS::readMeans(int rnum) {
int r;
char skip[500];
int index = 0; int area = 0; double mean = 0; int min = 0; int max = 0;
FILE *datafile = fopen(fileName,"r");
if(datafile == NULL) cout << "No such file!\n";
else {
//ignore the first line of the file
r = fscanf(datafile,"%s\n",skip);
cout << skip << endl; //just to check
//this is the problematic code
do {
r = fscanf(datafile,"%d\t%d\t%f\t%d\t%d\n",&index,&area,&mean,&min,&max);
cout << mean << " ";
} while(feof(datafile) != 1)
}
fclose(datafile);
}
这是我正在尝试读取的格式的示例数据文件:
Area Mean Min Max
1 262144 202.448 160 687
2 262144 201.586 155 646
3 262144 201.803 156 771
谢谢!
编辑:我说我需要读取第一个和第三个值,我知道我正在读取所有这些值。最终我需要存储第一个和第三个值,但为了简洁起见,我删掉了那部分。并不是说这个评论很简短。
【问题讨论】:
-
您的流中的某些行是否可能与此格式不匹配?在这种情况下, fscanf() 返回,使流保持原样,这意味着它永远不会到达 EOF。
-
如果是这样的话,我想我会非常惊讶。某些东西可以看起来像一个数字,但实际上是其他字符吗?它只是一个 .txt 文件,但它是由另一个程序(ImageJ)生成的,所以我想它是远程可能的。有什么好的方法来告诉?
-
@Gwen
while(feof(datafile) != 1)你能把;(分号)放在后面试试吗?? -
我试过了;感谢您发现错字。还是不行。
-
@Gwen 很高兴为您提供帮助。
标签: c++