C语言中怎么给一个结构体用scanf进行赋值?

比如说我要给员工的工号和姓名工资进行赋值。用scanf函数。structyuangong{chargonghao[10];charname[10];chargongz[1... 比如说我要给员工的 工号 和姓名工资进行赋值。用scanf函数。struct yuangong{ char gonghao[10]; char name[10]; char gongz[10]; char jiangj[10];}ren[50]; 展开
 我来答
问明6E
高粉答主

2019-06-25 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:12.9万
展开全部

结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存。

举例:编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数

#include <stdio.h>

#include <stdlib.h>

struct student  //建立结构体,学号,姓名,3门课的分数

{

int num;

char name[10];

int score[3];

}Stu[5];          //初始化,一共5个学生的数据

void getScore(struct student * p)  //函数:向结构体读取分数,一共三门课

{

int i, j;

for (i = 0; i < 5; i++)

for (j = 0; j < 3; j++)

scanf_s("%d", (&(p+i)->score[j]));

}

void getNum(struct student * p)  //函数:向结构体读取学号

{

int i;

for (i = 0; i < 5;i++)

scanf_s("%d", &(p + i)->num);

}

void getName(struct student * p)  //函数:向结构体读取姓名

{

int i;

for (i = 0; i < 5; i++)

scanf("%s", &(p + i)->name);

}

int main()

{

int i, j, average[3] = { 0 };   //average数组储存每门课的平均分

getNum(Stu);            //函数调用

getName(Stu);

getScore(Stu);

for (j = 0; j < 3; j++)

{

for (i = 0; i < 5; i++)

average[j] += Stu[i].score[j];

}

for (i = 0; i < 5; i++)

{

printf("num = %d name = %s Score:", Stu[i].num, Stu[i].name);  //依次打印学号 姓名

//printf("%d %d %d", Stu[0].score[0],Stu[0].score[1],Stu[0].score[2]);

for (j = 0; j < 3; j++)    //打印三门课的分数

printf(" %d", Stu[i].score[j]);

printf("\n");

}

printf("average:");

for (i = 0; i < 3; i++)

printf("%f ", (float)average[i]/5);   //打印三门课平均分

printf("\n");

system("pause");

return 0;

}

如:

scanf("%c%c%c",&a,&b,&c);

输入为:

d e f

则把'd'赋予a, ' '(空格)赋予b,'e'赋予c。因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此把' '作为下一个字符送给b。

只有当输入为:def(字符间无空格) 时,才能把'd'赋于a,'e'赋予b,'f'赋予c。

扩展资料:

1、函数原型

int scanf(const char * restrict format,...);

函数 scanf() 是从标准输入流stdin [1]  (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。

函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。

2、返回值

scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。如:

scanf("%d %d",&a,&b);函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;

如果只有a被成功读入,返回值为1;如果a和b都未被成功读入,返回值为0;如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。

例:使用scanf函数输入数据

#include <stdio.h>

int main(void)

{

int a,b,c;

printf("Give me the value of a,b,c seperated with whitespaces:\n");

scanf("%d%d%d",&a,&b,&c);

printf("a=%d,b=%d,c=%d\n",a,b,c);

return 0;

}

注意:&a,&b,&c中的&是寻址操作符,&a表示对象a在内存中的地址,是一个右值。变量a,b,c的地址是在编译阶段分配的(存储顺序由编译器决定)。

如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以用逗号分隔,只能用空白字符(空格或tab键或者回车键)分隔——“2 (空格)3(tab) 4” 或 “2(tab)3(回车)4”等。若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”。

参考资料:

百度百科——scanf(计算机语言函数)

水宫御子88
推荐于2017-09-05 · TA获得超过2238个赞
知道大有可为答主
回答量:3792
采纳率:50%
帮助的人:749万
展开全部

要给结构体赋值,先定义结构体,再分别给结构体成员赋值,可以使用scanf()函数,例如:

#include<stdio.h>
struct student
{
int num;
char name[10];
};
void main()
{
struct student s;
printf("输入学号:\n");
scanf("%d",&s.num);//scanf赋值给结构体的num成员
printf("输入姓名:\n");
scanf("%s",&s.name);
printf("输入的信息为:学号:%d,姓名:%s\n",s.num ,s.name);
}

运行的截图:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-04
展开全部
额!你定义了一个结构体变量ren,那么要对其成员赋值。---------scanf("%s",&stu.gonghao);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-04
展开全部
很简单的 在这个例子里面我建议你不用scanf改用getsgets(ren[0].gonghao)就可以了 因为都是字符型数组么、、
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式