首页 文章

C,阅读日期和数字,以及排序

提问于
浏览
1

我无法为我的生活弄清楚如何做到这一点:

我应该以这种格式读取此输入:

yyyy mm dd总计(销售额)

1990 11 22 6.89

1990 11 24 7.20

1991 2 4 5.36

...(假设所有条目按年份排序,然后是月份,然后是日期)

然后我打印输入值,每个月的小计,每年的小计和总计 .

我的问题:如何在保持每个条目一致的同时存储输入值?我必须能够在计算小计时检查我是否在同一年和月份 . 我需要访问每个浮点数以计算小计 .

哦,我只能使用stdio.h或创建自己的函数 .

那么如何存储它们以便我可以在保持它们一致的同时引用每个值?

任何帮助将不胜感激 . 先感谢您 .

4 回答

  • 1

    好吧,你可以声明一个包含年份int的结构,月份和日期的两个字符,以及值的浮点数 . 然后创建这些结构的数组 . 如果您提前知道文件中有多少行,这会更容易 . 然后将数据读入结构体中,然后通过数组运行计算总计就可以了 .

  • 0

    你通常想用结构来做这样的事情:

    struct sale {
        int year;
        int month;
        int day;
        double total;
    };
    

    然后,您可以创建 sale 项的数组,并引用单个字段,如: sales[i].year == sales[i+1].year .

  • 1

    除了已经说过如何存储结果数据之外,还有输入解析方面的东西 .

    为了您的具体目标(仅使用 <stdio.h> ),您需要执行以下操作:

    struct sale *s;
    for (s = sales; !feof(stdin); s++) {
        if (fscanf(stdin, "%4u %2u %2u %f\n",
            &s->year, &s->month, &s->day, &s->total) != 4) {
                error("Parsing error on <stdin>");
        }
        if (!date_is_valid(s))
            error("Invalid date given");
    }
    

    但是,如果使用为此目的而制作的现有功能,错误处理/无效格式检测会更容易:

    标准C(UN * X / POSIX,而不是),具有strptime()(在 <time.h> 中是标准包含文件)的功能 . 使用它而不是滚动自己的优点是它可以解析各种格式,检查日期有效性(你知道,就像在与美国和欧洲客户打交道时发生的月/日混合)并返回你的日期常用的数据结构( struct tm ) .

    这是另一个话题,但......

  • 1

    仅适用于已分拣的年份和月份:

    char line[100],lasty[100]="",lastm[100]="",y[100],m[100];
      double subm,suby,x;
      while( fgets(line,100,yourfilepointer) )
      {
        if( 3==sscanf(line,"%s%s%*s%lf",y,m,&x) )
        {
          if( strcmp(lastm,m) )
          {
            if( *lastm ) printf("\n%s %s =%f",lasty,lastm,subm);
            strcpy(lastm,m); subm=x;
            if( strcmp(lasty,y) )
            {
              if( *lasty ) printf("\n%s =%f",lasty,suby);
              strcpy(lasty,y); suby=x;
            }
            else
              suby+=x;
          }
          else
            subm+=x,suby+=x;
        }
      }
      if( *lastm ) printf("\n%s %s =%f",lasty,lastm,subm);
      if( *lasty ) printf("\n%s =%f",lasty,suby);
    

相关问题