我在C工作,我很新(2周前)。基本上我有一个文件,有两列数据用空格分隔。我需要逐行读取文件,并确定第二列第一次超过某个数字的时间。当它找到我正在寻找的行时,我希望它在屏幕上打印第一列中的相应数字。两列都是按数字顺序排列的。
更具体地说,column1是一年,column2是一个人口。人口第一次超过某个数字X时,我想打印相应的日期。
到目前为止,我的代码可以扫描并查找人口数量> X然后打印日期,但它打印每个具有人口>的日期。 X.我不能让它只在第一次超过X时打印而没有别的。
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *in;
int ni,i;
double d,p;
if((in=fopen("pop.dat","r"))==NULL) {
printf("\nCannot open pop.dat for reading\n");
exit(1);
}
while(fscanf(in,"%lf %lf",&d,&p)!=EOF) {
if (p>350) printf("\nDate is %f and Population is %f",d,p);
}
fclose(in);
return(0);
}
答案 0 :(得分:1)
要让它只打印第一个,你可以将代码添加到这样的函数中。
double getFirstDate(const char* filename)
{
FILE *in;
int ni,i;
double d,p;
if((in=fopen(filename,"r"))==NULL) {
printf("\nCannot open pop.dat for reading\n");
exit(1);
}
while(fscanf(in,"%lf %lf",&d,&p)!=EOF) {
if (p>350)
{
printf("\nDate is %f and Population is %f",d,p);
fclose(in);
return p;
}
fclose(in);
return -1;
}
然后从main
调用此函数答案 1 :(得分:0)
一旦打印完年份,您也可以打破循环。
while(fscanf(in,"%lf %lf",&d,&p)!=EOF) {
if (p>350) {
printf("\nDate is %f and Population is %f",d,p);
break;
}
}