【问题标题】:Edit my struct in C with pointer用指针在 C 中编辑我的结构
【发布时间】:2018-07-08 08:08:33
【问题描述】:

我想创建一个编辑函数,通过引用歌曲向量作为参数接收。 (使用指针)

用户必须选择歌曲编号并重新输入向量该位置的数据。

我创建了结构,我已经收到了值并且我正在玩。但我不知道如何编辑。有人可以帮我开始这部分吗?

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    #include <locale.h>
    #include <string.h>

      struct registry_of_music  {
        char name[50];
        char artist[60];
        char url[80];
    };
    struct registry_of_music music[9];

    int main() {
    int i;
    printf("\nRegistry of Music\n\n\n");

        for(i = 0; i <= 3;i++ ){
              printf("Name of Music: ");
              fflush(stdin);
              fgets(music[i].name, 50, stdin);

              printf("Name of Artist: ");
              fflush(stdin);
              fgets(music[i].artist, 60, stdin);

              printf("URL of Internet: ");
              fflush(stdin);
              fgets(music[i].url, 80, stdin);
        }

        int op;
        do
        {
            printf("1 - Play\n");
            printf("2 - Edit\n");
            printf("3 - Exit\n");
            printf("Please enter a value:");
            scanf("%d", &op);
                    switch(op) {
                case 1: play();
                        break;
                case 2: edit();
                        break;
                case 3: printf("Bye\n");
                        break;
                default: printf("Try Again\n");
            }
        } while (op!=3);

      getch();
      return(0);
}
    void play(){
    int i;
        for(i = 0; i <= 3;i++ ){
           printf("Name ...........: %s", music[i].name);
           printf("Artist .....: %s", music[i].artist);
           printf("URL .....: %s", music[i].url);
     }
}

    void edit(){}

【问题讨论】:

  • 您的变量 music 是全局变量,因此您可以按原样使用它,就像在 play 中一样。如果您想将其作为参数传递,您需要添加参数 void edit(registry_of_music music[]) {} 并调用 edit(music)
  • C 中没有向量。
  • fflush(stdin) 不符合标准,您可能不应该使用它或非常依赖它。

标签: c vector data-structures struct point


【解决方案1】:

如果在未初始化的结构或已初始化的结构上执行,«fill instance of structure»动作是绝对相同的。即使实例没有初始化,它的字段中也有一些垃圾值。

另一方面,没有办法指定默认值,默认值将显示在fgets 的提示符中并且可用于键盘编辑,除非您使用更复杂的(并且不包含在 ISO C 标准中) ) 工具。

【讨论】:

  • 1) 请不要回答要求代码的离题问题。 2) 我看不出这甚至如何回答问题 3) 使用标准 C 库可以很好地完成。 4) 没有 非标准(但非常常见)的库会更复杂,例如阅读线。 5) 静态变量总是保证被初始化。
  • @Olaf 我的意思是«如果您想编辑一个实例,您可以执行与使用用户提供的值初始化该实例完全相同的操作»。
猜你喜欢
  • 2022-12-20
  • 2017-04-02
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多