簡體   English   中英

當數字首先超過設定數量時,如何掃描數據文件並將值打印到屏幕

[英]How to scan a file of data and print a value to the screen when a number first exceeds a set number

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

要讓它只打印第一個,您可以將代碼添加到這樣的函數中。

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調用此函數

一旦打印完年份,您也可以打破循環。

     while(fscanf(in,"%lf %lf",&d,&p)!=EOF) {
       if (p>350) { 
         printf("\nDate is %f and Population is %f",d,p);
         break;
       }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM