打印结构数组

玛迪·莱格(Maddy Leger)

我用C语言编写了一个程序,该程序按年份对汽车记录进行排序并打印,对它们进行建模和打印,然后查找并打印重复记录。但是,唯一的记录打印是在重复功能中。否则,输出将完全空白...我尝试在DevC ++和Linux上进行编译。记录是一个全局声明的结构,我正在使用for循环打印它们……求助!

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

struct Car      //struct for cars
{
    char make[20];
    char model[20];
    int year;
    char color[20];
} usedCars[10] = //user inputted cars
{
    {"toyota","matrix",2006,"silver"},
    {"honda","accord",2009,"blue"},
    {"chrysler","ptcruiser",2001,"red"},
    {"volvo","xc70",2010,"blue"},
    {"chevy","blazer",2001,"black"},
    {"ford","f150",1998,"blue"},
    {"jeep","grandcherokee",2008,"red"},
    {"cadillac","deville",2004,"red"},
    {"volkswagen","jetta",2010,"silver"},
    {"chrysler","ptcruiser",2001,"red"}
};

void print_cars_by_year() //prints by year
{
    char temp[20]; //array for swapping records
    int i,j,tmp; //variables for swapping

    for (i=0; i<10; i++) // nested loop for bubble sort - repeats for 10 records
    {
        for (j=0 ; j<9; j++) //bubble sort loop
        {
            if (usedCars[j].year > usedCars[j+1].year) //if the years of the first two records are not equal
            {
                strcpy(temp, usedCars[j].make); //uses strcpy to swap the records of make
                strcpy(usedCars[j].make, usedCars[j+1].make);
                strcpy(usedCars[j+1].make, temp);

                strcpy(temp, usedCars[j].model);    //uses strcpy to swap model
                strcpy(usedCars[j].model, usedCars[j+1].model);
                strcpy(usedCars[j+1].model, temp);

                tmp = usedCars[j].year; //typical int bubble sort
                usedCars[j].year = usedCars[j+1].year;
                usedCars[j+1].year = tmp;

                strcpy(temp, usedCars[j].color);    //uses strcpy to swap color
                strcpy(usedCars[j].color, usedCars[j+1].color);
                strcpy(usedCars[j+1].color, temp);
            }
        }
    }

    printf("\nThe records sorted by year are:\n");
    printf("Make\t\tModel\t\tYear\tColor\n");
    for (i=0; i<10; i++); //prints newly sorted records
    {
        printf("%s\t%s\t%d\t%s\n",usedCars[i].make,usedCars[i].model,usedCars[i].year,usedCars[i].color);
    }
}

void print_cars_by_model()
{
    char temp[20]; //array for swapping records
    int i,j,tmp; //variables for swapping

    for (i=0; i<10; i++) // nested loop for bubble sort - repeats for 10 records
    {
        for (j=0 ; j<9; j++) //bubble sort loop
        {
            if (strcmp(usedCars[j].model, usedCars[j+1].model)>0) //if the models of the first two records are not equal
            {
                strcpy(temp, usedCars[j].make); //uses strcpy to swap the records of make
                strcpy(usedCars[j].make, usedCars[j+1].make);
                strcpy(usedCars[j+1].make, temp);

                strcpy(temp, usedCars[j].model);    //uses strcpy to swap model
                strcpy(usedCars[j].model, usedCars[j+1].model);
                strcpy(usedCars[j+1].model, temp);

                tmp = usedCars[j].year; //typical int bubble sort
                usedCars[j].year = usedCars[j+1].year;
                usedCars[j+1].year = tmp;

                strcpy(temp, usedCars[j].color);    //uses strcpy to swap color
                strcpy(usedCars[j].color, usedCars[j+1].color);
                strcpy(usedCars[j+1].color, temp);
            }
        }
    }
    printf("\nThe records sorted by model are:\n");
    printf("Make\t\tModel\t\tYear\tColor\n");
    for (i=0; i<10; i++); //prints unsorted records
    {
        printf("%s\t%s\t%d\t%s\n",usedCars[i].make,usedCars[i].model,usedCars[i].year,usedCars[i].color);
    }
}

void print_duplicate_records()
{
    int i,j;

    for (i=0; i<10; i++)
    {
        for (j=i+1; j<10; j++) //will not compare same record
        {
            if (strcmp(usedCars[i].model, usedCars[j].model) == 0) //only go if models are equal
            {
                if (strcmp(usedCars[i].make, usedCars[j].make) == 0)    //only go if makes are equal
                {
                    if (usedCars[i].year==usedCars[j].year) //only go if years are equal
                    {
                        if (strcmp(usedCars[i].color, usedCars[j].color) == 0) //if colors are equal, the record is equal
                        {
                            printf("\nThere is a duplicate record:\n");
                            printf("Make\t\tModel\t\tYear\tColor\n");
                            printf("%s\t%s\t%d\t%s\n",usedCars[i].make,usedCars[i].model,usedCars[i].year,usedCars[i].color);
                        }
                    }
                }
            }
        }
    }
}

int main()
{
    int i;
    printf("The records (unsorted) are:\n");
    printf("Make\t\tModel\t\tYear\tColor\n");
    for (i=0; i<10; i++); //prints unsorted records
    {
        printf("%s\t%s\t%d\t%s\n",usedCars[i].make,usedCars[i].model,usedCars[i].year,usedCars[i].color);
    }

    print_cars_by_year(); //call to by year func

    print_cars_by_model(); //call to by model func

    print_duplicate_records();

    return 0;
}

输出看起来像

记录(未排序)是:使型号年份颜色0

(两个排序函数也是如此)

有重复的记录:使Model Year Color克莱斯勒ptcruiser 2001红色

伊哈罗布·阿西米(Iharob Al Asimi)

您在这里放置了错误的分号

for (i=0; i<10; i++);
/*                  ^ what? */

这意味着后面的代码将只执行一次。

另外,请格式化您的代码,以防止这种错误,也请使用编译器警告,我不想阅读代码,因为它太乱了,所以我尝试使用警告进行编译,并clang抱怨分号,像这样

error: for loop has empty body [-Werror,-Wempty-body]

如您所见,我没有阅读代码就发现了问题,因为我使用了可用的工具来帮我检查一下。

您应该修复的更重要的事情是if代码中的许多语句,您可以使用&&运算符来避免这么多级别的缩进。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

打印结构数组

来自分类Dev

打印出结构数组的元素

来自分类Dev

如何打印结构和数组?

来自分类Dev

在lldb python中打印结构数组

来自分类Dev

Numpy结构化数组的打印精度

来自分类Dev

打印包含2d数组的结构

来自分类Dev

Numpy结构化数组的打印精度

来自分类Dev

在结构内打印任意大小的数组

来自分类Dev

递归打印结构数组中的数据

来自分类Dev

C - 在结构数组内打印二维数组的元素

来自分类Dev

打印结构

来自分类Dev

在GDB中打印结构数组的变量值

来自分类Dev

如何打印由结构变量保存的char数组?

来自分类Dev

如何在结构中打印无符号字符数组的内容?

来自分类Dev

结构数组打印了最后一个元素

来自分类Dev

如何从结构的指针打印无符号字符数组?

来自分类Dev

在GDB中打印结构数组的变量值

来自分类Dev

从文件获取行,放入结构数组,打印内容(作业)

来自分类Dev

(C)从调用其他函数的函数中打印结构数组

来自分类Dev

如何打印包含在数组中的结构元素

来自分类Dev

C-创建一个动态的结构数组,结构成员打印错误的值?

来自分类Dev

在结构的灵活成员数组中打印结构成员的地址

来自分类Dev

将结构打印到文件打印字符数组的所有空元素

来自分类Dev

结构和打印

来自分类Dev

无法打印结构

来自分类Dev

快速打印结构名称

来自分类Dev

GDB打印结构的字段

来自分类Dev

如何正确打印结构?

来自分类Dev

Specman打印参考结构