使用函数打印结构

时间:2015-10-21 01:44:18

标签: c function struct parameters printf

声明描述单个视频游戏的结构。 视频游戏有标题,流派,平台,开发者,发行年份,年龄下限,价格和 他们是否支持应用内购买。您需要选择适当的数据类型 要存储在结构中的信息。

  • 命名结构:Video_Game。
  • 在main函数中本地声明三个视频游戏结构变量,名为game1,game2 和game3。
  • 分配给game1的成员,上面的Candy Crush Saga(King,2012)示例的详细信息。
  • 分配给game2的成员,上面是Halo 4(343 Industries,2014)示例的详细信息。
  • 分配给game3的成员,你最喜欢的游戏的详细信息...如果你不玩游戏, 检查你的智能手机......当然你在那里玩一些东西......如果没有,请检查相关的应用程序商店 顶级排行榜并找到一款可能成为您新宠的游戏!
  • 接下来,声明一个名为print_video_game_details()的函数,它接受一个参数 这是前面声明的视频游戏结构的指针。在此功能中,打印出详细信息 游戏传递给该功能,采用上面显示的Candy Crush Saga和Halo 4的风格 实例
  • 接下来,从main调用print_video_game_details函数三次,传入 成员全部设定后,game1,game2和game3的地址。

到目前为止我的代码:

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

struct video_game
{
   char* title;
   char* genre;
   char* developer;
   int year;
   char* platform;
   int lower_age;
   float price;
   char* inapp_purchase;
}game1, game2;

void print_video_game_details()
{
    for(int i =1; i<=3; i++)
    {
        printf("Title: %s", game[i].title); // game[i] is showing an error "undeclared"
        printf("Genre: %s", game[i].genre);
        printf("Developer: %s", game[i].developer);
        printf("year of release: %d", game[i].year);
        printf("platform: %s", game[i].platform);
        printf("lower age: %d", game[i].lower age);
        printf("price: %f", game[i].price); //is showing an error "incompatible"
        printf("inapp_purchase: %s", game[i].inapp_purchase);
    }
}

int main(void)
{
    game1.title = "Candy crush saga";
    game1.genre = "Match-Three Puzzle";
    game1.developer = "King";
    game1.year = "2012";
    game1.platform = "Android, ios, Windows Phone";
    game1.lower_age = "7";
    game1.price = "$0.00";
    game1.inapp_purchase = "yes";
    print_video_game_details();
}

我无法打印出结构,因为它无法编译。

错误:

prog.c: In function 'print_video_game_details':
prog.c:27:33: error: 'struct video_game' has no member named 'lower'
 printf("lower age: %d", game[i].lower age);
 ^
prog.c:27:40: error: expected ')' before 'age'
 printf("lower age: %d", game[i].lower age);
 ^
prog.c: In function 'main':
prog.c:39:15: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
 game[0].year = "2012";
 ^
prog.c:41:20: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
 game[0].lower_age = "7";
 ^
prog.c:42:16: error: incompatible types when assigning to type 'float' from type 'char *'
 game[0].price = "$0.00";
 ^

1 个答案:

答案 0 :(得分:1)

您的代码存在的问题:

  1. 在第printf("lower age: %d", game[i].lower age);行中,lower age应为lower_age
  2. 如果您计划在struct video_game game[1];
  3. 中使用for循环,则应定义类似print_video_game_details()的数组
  4. 对于循环限制,应从i = 0开始,然后转到i < [however many games there are]
  5. 主要应定义game[0]game[1]等,而不是game1game2等。
  6. game[0].year是一个int,所以不要将2012放在引号
  7. game[0].price是一个浮点数,所以请不要使用引号并删除美元符号。
  8. 以下是我们在评论中讨论过的代码。它适用于一个视频游戏。您可以增加video_game game[x]数字和for循环以支持多个视频游戏。

    #include <stdio.h>
    #include <string.h>
    
    struct video_game
    {
        char* title;
        char* genre;
        char* developer;
        int year;
        char* platform;
        int lower_age;
        float price;
        char* inapp_purchase;
    }game1, game2;
    
    struct video_game game[1];
    
    void print_video_game_details()
    {
        int i;
        for(i = 0; i < 1; i++)
        {
            printf("Title: %s\n", game[i].title);
            printf("Genre: %s\n", game[i].genre);
            printf("Developer: %s\n", game[i].developer);
            printf("year of release: %d\n", game[i].year);
            printf("platform: %s\n", game[i].platform);
            printf("lower age: %d\n", game[i].lower_age);
            printf("price: %f\n", game[i].price);
            printf("inapp_purchase: %s\n", game[i].inapp_purchase);
        }
    }
    
    int main(int argc, char* argv[])
    {
        game[0].title = "Candy crush saga";
        game[0].genre = "Match-Three Puzzle";
        game[0].developer = "King";
        game[0].year = 2012;
        game[0].platform = "Android, ios, Windows Phone";
        game[0].lower_age = 7;
        game[0].price = 0.0;
        game[0].inapp_purchase = "yes";
        print_video_game_details();
    }