c - 运行我的具有两个结构和枚举常量的 c 程序时遇到问题

标签 c

问题说有两个结构

第一个结构应该有这些成员(名为 title 的字符串,长度为 15 个字符,double called length,类型为枚举流派的流派,其中一种流派作为枚举常量 Blues,HipHop,Jazz,Country,Electronic,Rock,Other ).

第二个结构应该有(名为 title 的字符串,长度为 20 个字符,名为 artist 的字符串,长度为 30 个字符,名为 song 的成员类型为 Song,最多包含 4 首歌曲,最后一个成员是一个名为 c 的整数变量,即用作歌曲数量的计数器。)

struct song 必须别名为 Song。
struct album 必须是 Album 的别名。

我的程序是这样的

enum genres { Blues = 0, HipHop, Jazz, Country, Electronic, Rock, Other};

struct song {
  char title[15];
  double length;
  enum genres genre;
};

typedef struct song Song;
struct album { 
char title[20];
char artist[30];
Song songs[4];
int noOfSongs;
};
typedef struct album Album;

现在从这里开始我遇到了问题,因为问题是这样说的。 有:

  1. getAlbum 函数,它将专辑指针作为参数提示用户输入专辑名称和艺术家姓名。
  2. getSong 函数,将专辑指针作为参数提示用户输入歌曲名称、歌曲长度和该歌曲的流派。
  3. printAlbum 函数此函数显示用户提示的信息。

请注意,一张专辑中的歌曲数量最多为 4 首。

我想出了这些函数原型(prototype)

void getAlbum( Album *aPtr);
void getSong( Album *sPtr);
void printAlbum( Album *pPtr);

我在功能和实现方面遇到问题,而且我不确定我的枚举和结构相册是否正确,因为我无法访问它们。

最佳答案

实现一个函数其实很简单。你已经有了原型(prototype),所以你只需要添加括号就可以有一个基本的功能:

void getAlbum(Album *aPtr) {

}

当然,这还不会做任何事情,所以让我们从一个简单的提示开始:

void getAlbum(Album *aPtr) {
    printf("Enter the album name: ");
}

现在将显示文本,但不会要求提供实际文本。要做到这一点,也有几种不同的方法。我将在这里使用 scanf(),虽然它应该只用于测试目的和(可能)内部工具,因为它可能相当棘手且容易出错(例如,如果垃圾是输入)。

void getAlbum(Album *aPtr) {
    printf("Enter the album name: ");
    scanf("%19s", aPtr->title); // read up to 19 characters as a (s)tring; the 20th will be the terminator ('\0')
}

给你。只需展开它即可读取所需的所有值。 getSong() 函数也是如此。

然后打印所有内容将非常相似,只是将成员作为参数传递给 printf() 而不是 scanf()

关于c - 运行我的具有两个结构和枚举常量的 c 程序时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16388901/

相关文章:

cmake 使静态库中的所有符号都在外部

c - 在文件中搜索字符串 (C)

c - 如何将CMock单元测试框架与Make集成

c++ - 内核函数参数为 const

c++ - 我想使用 64 位整数可以采用的完整范围。我如何在 x86 Visual Studio 2008 中执行此操作?

c - strlen 问题,返回正确的长度 + 2

c - 在c中获取处理器供应商名称的正确方法是什么?

计算数组中当前元素右侧的更大元素

c - 删除函数在 C 中不适用于特定文件但适用于其他文件

c - 为什么在删除目标文件后写入文件描述符会成功?