【问题标题】:Sorting a struct array based on int基于 int 对结构数组进行排序
【发布时间】:2018-07-02 11:22:30
【问题描述】:

我在尝试对 int 数字进行排序时有点卡住了。我正在尝试根据其编号(数字)显示项目。 int main#includes 在程序中,只是无法复制它们。有没有首选的原因来处理这个问题,有人可以解释一下吗,我已经尝试了一段时间哈哈。谢谢

char *oneline, *tok;
char envara[512];
char delim[] = ",";
FILE *fp;
int i;

struct vara
{
    int nummer;
    char namn[100];
    float pris;
    float volym;
    char typ[100];
    char stil[100];
    char forpackning[20];
    char land[20];
    char producent[50];
    float alkoholhalt;

} items[100];


if ((fp = fopen("varor.csv", "r")) == NULL)
{
    fprintf(stderr, "Filen varor.csv gick inte att öppna\n");
    exit(-1);
}

for (i = 0; i < 100 && fgets(envara, 512, fp); i++)
{
    envara[strlen(envara) - 1] = '\0';
    oneline = strdup(envara);

    tok = strtok(oneline, delim);
    items[i].nummer = atoi(tok);
    tok = strtok(NULL, delim);
    strncpy(items[i].namn, tok, (max(strlen(tok), sizeof(items[0].namn))));
    tok = strtok(NULL, delim);
    items[i].pris = atof(tok);
    tok = strtok(NULL, delim);
    items[i].volym = atof(tok);
    tok = strtok(NULL, delim);
    strncpy(items[i].typ, tok, strlen(tok));
    tok = strtok(NULL, delim);
    strncpy(items[i].stil, tok, strlen(tok));
    tok = strtok(NULL, delim);
    strncpy(items[i].forpackning, tok, strlen(tok));
    tok = strtok(NULL, delim);
    strncpy(items[i].land, tok, min(strlen(tok), sizeof(items->land)));
    tok = strtok(NULL, delim);
    strncpy(items[i].producent, tok, strlen(tok));
    tok = strtok(NULL, delim);
    items[i].alkoholhalt = atof(tok);

    printf("nummer: %d\n"
        "namn: %s\n"
        "pris: %f\n"
        "volym: %f\n"
        "typ: %s\n"
        "stil: %s\n"
        "forpackning: %s\n"
        "land: %s\n"
        "producent: %s\n"
        "alkoholhalt: %f\n\n",
        items[i].nummer,
        items[i].namn,
        items[i].pris,
        items[i].volym,
        items[i].typ,
        items[i].stil,
        items[i].forpackning,
        items[i].land,
        items[i].producent,
        items[i].alkoholhalt
    );

    free(oneline);
}

fclose(fp);
}

【问题讨论】:

  • 我没有看到任何看起来像排序的东西。
  • 你卡住了问题的哪一方面?
  • 不,我必须删除那部分。一切都错了。如果你有时间,我正在寻找一个替代方案,从一开始就
  • 我猜插入排序可以吗?但是我如何很好地应用它呢?
  • 为什么不使用qsort()

标签: c arrays visual-studio sorting struct


【解决方案1】:
int cmpVara(const struct vara *left, const struct vara *right)
{
      // quick & dirty way to compare two ints.
      return (long) left.nummer - (long) right.nummer;
}

// :
// :

       qsort(items, i, sizeof(vara), cmpVara);

iitems 中的元素个数。

【讨论】:

  • 好奇心 - 为什么演员阵容要长?
  • @pm100 如果整数接近 INT_MIN 和 INT_MAX,则差异可能会出现,给出我们想要的倒数。假设 long 大于 int(不保证),转换为 long 应该可以防止这种情况发生。
猜你喜欢
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多