【问题标题】:C programming structure [duplicate]C编程结构[重复]
【发布时间】:2017-10-24 10:46:16
【问题描述】:
#include <stdio.h>
int main () {
    struct Record {
        int employeeNumber;
        char employeeName;
        float salary;
        int yearsServiced;  
    } record[5];

    struct record[0] = {46723, "Fattah", 4550.00, 8};
    printf("TheEmployee number is %d", record[0].employeeNumber);

}

为什么我的程序无法运行?请帮忙。感谢您的提前。

【问题讨论】:

  • struct record[0] 声明一个大小为 0 的数组。
  • char employeeName; --> char *employeeName;, struct record[0] = {46723, "Fattah", 4550.00, 8}; --> record[0] = (struct Record){46723, "Fattah", 4550.00, 8};
  • 我不明白。请进一步解释。为什么需要强制转换(结构记录)?
  • @TeoPeiShen 不要听BLUEPIXY的解法,没错,但在这种状态下会让你迷惑。
  • 请查看stackoverflow.com/help/how-to-ask ...您的问题虽然可能会得到解答,但对将来遇到类似问题的任何人都没有帮助,也不会对 StackOverflow 增加任何内容。

标签: c


【解决方案1】:

struct record[0] 声明了一个大小为 0 的数组。您打算初始化数组的第一个元素,但混淆了声明和索引:

struct Record myRecord[1] = {46723, "Fattah", 4550.00, 8};

这声明了一个大小为 1 的数组并使用给定值初始化第一个元素。

【讨论】:

  • 那么,struct 数组不像 int 数组或 char 数组那样从 [0] 开始?感谢您的快速响应。
  • struct record[1] --> struct Record record[1](并为数组的变量名改名)
  • @Bluepix,谢谢。解决了这个问题。
  • 另外,好像employeeName的类型不对。
  • #include int main (){ struct Record{ int employeeNumber; char 员工姓名;浮动工资; int yearsServiced; } 记录[5];结构记录[1] ={46723,"Fattah",4550.00,8}; printf("员工编号为 %d",record[1].employeeNumber); }
【解决方案2】:

首先,struct record[0] 声明了一个大小为 0 的数组,您需要将其更改为 struct record[1]

关于选角的疑问,请阅读Struct initialization of the C/C++ programming language?

最后,我认为这不是您的错误的原因,但您为什么要尝试将 "Fattah" 分配给 char 类型的变量。

【讨论】:

    【解决方案3】:

    您将employeeName 声明为char,但传入了一个字符串。 employeeName 需要是 char 上的指针。

    char *employeeName;

    #include <stdio.h>
    int main () {
        struct Record {
            int employeeNumber;
            char *employeeName;
            float salary;
            int yearsServiced;  
        } record[5];
    
    record[0].employeeNumber = 46723;
        record[0].employeeName = "Fattah";
        record[0].salary = 4550.00;
        record[0].yearsServiced = 8;
    
        printf("TheEmployee number is %d", record[0].employeeNumber);
    
    }
    

    【讨论】:

    • 我了解您的解决方案,但您有办法让我在一行中构建所有元素。感谢您的快速响应。
    猜你喜欢
    • 1970-01-01
    • 2019-09-28
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多