当数字首先超过设定数量时,如何扫描数据文件并将值打印到屏幕

时间:2011-09-25 00:05:49

标签: c scanf

我在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);
}

2 个答案:

答案 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;
       }
    }