【问题标题】:error when using pointers, dynamically allocating ,struct使用指针,动态分配,结构时出错
【发布时间】:2022-01-01 05:26:23
【问题描述】:

我的代码没有运行,我该如何解决它 我想我不明白我错在哪里 使用指针,动态分配,结构时出错

#include"stdio.h"
#include"stdlib.h"
#include"string.h"
struct nhanVien{
    int code;
    char name[50];
    char sex[50];
    int numb;
    int wage;
};
void input(nhanVien *worker,int n){
    for(int i=0;i<n;i++){
        printf("Nhap ma nhanVien : ");
        scanf("%d",(worker->code+i));
        
    }
}
int main(){
    nhanVien *worker;
    int n;
    printf("Nhap so luong nhan vien : ");
    scanf("%d",&n);
    worker = (nhanVien*)malloc(n*sizeof(nhanVien));
    input(worker,n);
    for(int i=0;i<n;i++){
        printf("Nhap ma nhanVien : %d \n",*(worker->code+i));
        
    }
    free(worker);
    
}

一元'*'的无效类型参数(有'int')C中的错误 这是图片enter image description here

【问题讨论】:

  • scanf("%d",(worker-&gt;code+i)); - 这行应该做什么? worker-&gt;code+i 是一个整数,而 scanf 需要一个指针。
  • 看起来worker-&gt;code+i 应该是worker[i].code
  • @mch &amp;worker[i].code
  • @EugeneSh。对于scanf,但不是printf

标签: c struct declaration member-access


【解决方案1】:

我在你的代码中发现了一些问题,worker-&gt;code+i 应该是worker[i].code;您在 struct 类型上缺少 typedef。基本上,你想要类似的东西

#include"stdio.h"
#include"stdlib.h"
#include"string.h"

typedef struct {
    int code;
    char name[50];
    char sex[50];
    int numb;
    int wage;
} nhanVien;

void input(nhanVien *worker,int n) {
    for(int i=0; i<n; i++) {
        printf("Nhap ma nhanVien : ");
        scanf("%d", &worker[i].code);
    }
}

int main() {
    nhanVien *worker;
    int n;
    printf("Nhap so luong nhan vien : ");
    scanf("%d",&n);
    worker = (nhanVien*)malloc(n*sizeof(nhanVien));
    input(worker,n);
    for(int i=0; i<n; i++) {
        printf("Nhap ma nhanVien : %d \n",worker[i].code);
    }
    free(worker);
}

【讨论】:

    【解决方案2】:

    名称nhanVien 未声明。声明了类型说明符struct nhanVien

    所以你需要使用这个名字作为例子

    void input( struct nhanVien *worker,int n){
    

    struct nhanVien *worker;
    

    worker = (struct nhanVien*)malloc(n*sizeof( struct nhanVien));
    

    scanf的这个调用

    scanf("%d",(worker->code+i));
    

    不正确。你需要写任何一个

    scanf("%d", &( worker + i )->code);
    

    scanf("%d", &worker[i].code);
    

    还有这个 printf 调用

    printf("Nhap ma nhanVien : %d \n",*(worker->code+i));
    

    不正确。你需要写

    printf("Nhap ma nhanVien : %d \n", worker[i].code);
    

    【讨论】:

      猜你喜欢
      • 2020-05-17
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多