使用指针,动态分配,结构时出错
Posted
技术标签:
【中文标题】使用指针,动态分配,结构时出错【英文标题】: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->code+i));
- 这行应该做什么? worker->code+i
是一个整数,而 scanf
需要一个指针。
看起来worker->code+i
应该是worker[i].code
。
@mch &worker[i].code
@EugeneSh。对于scanf
,但不是printf
【参考方案1】:
我在你的代码中发现了一些问题,worker->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);
【讨论】:
以上是关于使用指针,动态分配,结构时出错的主要内容,如果未能解决你的问题,请参考以下文章