包含sprintf给结构体赋值的词条
编程题啊求解 定义一种结构体类型,该类型的结构体能表示一个人的姓名、年龄
struct?People
{
????char?name[30];
????int?age;
????float?height;
????float?weight;
};
可以执行在程序里赋值
struct?People?pe;
sprintf(pe.name,"me");
pe.age?=?18;
pe.height?=?178.3
pe.weight?=?69.2
怎么用SCANF给结构体赋值啊,我赋值后只有输出了第一个
结构体不可以用scanf,strcpy,memcpy等函数赋值。
但是一般socket编程中能用到。
方式为两边定义一样的结构体(以你的结构体为例)
memcpy(buff,ps,sizeof(ps));
send(buff);
接收端可以recv(ps)直接用结构体接收。
但是还需说明一点 这样用 结构体中不可以有指针。
怎样使用scanf对结构数组中的成员赋值
要给结构体赋值,先定义结构体,再分别给结构体成员赋值,可以使用scanf()函数,例如:
#includestdio.hstruct?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);}
运行的截图:
linux c 结构体怎么赋值
在 username() 和 password() 两个函数中使用的 x 是从哪里来的? 显然不是通过调用的时候传入的,那么,他们的值在 username() 里 和 password() 里是否一致? 我估计两次的 x 不一致,比方说赋值 username时,x = 3, 而在 下一步走到 password 里的时候, x = 5 了,那当然就不对了。所以你应该贴上来和 x 有关的代码。
C语言中怎么给一个结构体用scanf进行赋值?
结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行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(计算机语言函数)
结构体内char* 成员的赋值问题
char texture[16];是局部变量,函数结束之后内存就释放了
改成static char texture[16];
或者提到外面作为全局变量
char texture[16];
struct test{
char* a;
......
};
int func1( sturct test *test1)
{
texture = "abc";
test1-a = texture;
return 0;
}