C语言结构体数组常用的三种赋值方法(包含字符串)

目录
  • 一、按照成员变量进行赋值(麻烦,好理解,字符串赋值需要strcpy)
  • 二、对数组整体进行赋值。(一次性需要把所有的都添加进去,不需要strcpy)
    • (1) 在声明数组的时候,进行赋值
    • (2)对有规律的数据赋值,比如学生结构体的学号是有规律的。
  • 三、使用输入进行赋值
  • 总结

一、按照成员变量进行赋值(麻烦,好理解,字符串赋值需要strcpy)

这里使用了一个Init函数,为了在进一步说明传参的使用。实际上赋值按照需要放在主函数就行。

(使用strcpy函数需要添加头文件string.h)

	#include <stdio.h>
	#include <string.h>

	typedef struct date  //定义了一个日期结构体,包含年月日三个成员
	{
		int year;
		int mouth;
		int day;
	}datea;

	typedef struct  schedule//定义了一个日程结构体,包含日期,和活动两个成员变量
	{
		char name[10];
		datea date;
		char activity[200];
	}sch;

	int Init(sch *name)  //初始化函数 数组用指针接收
	{
		strcpy(name[0].name,"jack");
		name[0].date.year = 2021; //使用级联运算
		name[0].date.mouth = 11;
		name[0].date.day = 11;
		strcpy(name[0].activity,"Taobao shooping");

		strcpy(name[1].name,"Amy");
		name[1].date.year=2021;
		name[1].date.mouth = 11;
		name[1].date.day = 12;
		strcpy(name[1].activity,"play piano");
	 } 

	int main()
	{
		sch name[2] ;
		Init(name);
		for(int i=0;i<2;i++)
		{

			printf("%s %d %d %d \n%s \n",name[i].name,name[i].date.year,name[i].date.mouth,name[i].date.day,name[i].activity);
		}

	}

二、对数组整体进行赋值。(一次性需要把所有的都添加进去,不需要strcpy)

(1) 在声明数组的时候,进行赋值

可以换行,中间的结构体嵌套需要再次使用花括号括起来(这里没有传参,放在被调函数不能这么赋值)。

sch name[2] = {{"jack",{2021,11,11},"Taobao Shopping"},
						{"jack",{2021,11,11},"Taobao Shopping"}};

也可以直接写下去:

typedef struct student {
    int sno;
    char name[20];
} stu;

int main() {
    stu stua[5] = {1001,"jack",1002,"Amy"};

输出结果:

这里举了个例子,定义了一维数组name,将name传到被调函数的时候,只剩下了首地址,对其进行赋值是[Error] declaration of 'sch name' shadows a parameter  ,就是说缺少参数,因为只有首地址,并不是完整的数组,所以不能这么赋值。

(2)对有规律的数据赋值,比如学生结构体的学号是有规律的。

#include <stdio.h>

typedef struct student  //定义了学生结构体
{
	int sno;
	char name ;
}stu;

stu stua[5];  //5名学生的结构体数组 

int main()
{
	for(int i=1;i<5;i++)
	{
		stua[i].sno=i;  //循环赋值,5名学生的学号依次为1-5
	}

	return 0;
}

三、使用输入进行赋值

依然用学生为例子。

(1)直接使用for,配合动态分配内存,这里按照数据库的数据类型,我将学号定义为char型,实际上定义为int 即可。

#include <stdio.h>
#include <stdlib.h>

typedef struct student {
    char sno[6];
    char name[20];
} stu;

int main()
{
	int N;
	scanf("%d",&N);//获得学生个数
    stu * stua = (stu *)malloc(N * sizeof(stua));  //动态分配了结构体变量stua的长度 

    //方法一:用for给结构体赋值
	for(int i=0;i<N;i++)
	{
		scanf("%s %s",stua[i].sno,stua[i].name);
	 }
	for(int i=0;i<N;i++)
	{
		printf("%s %s\n",stua[i].sno,stua[i].name);
	 }
}

输出结果:

(2)调用函数赋值,我们知道,结构体数组中,数组有多个元素,每个数组元素又有多个结构体成员变量,所以将每个数组元素用函数分别去赋值。

#include <stdio.h>
#include <stdlib.h>

typedef struct student {  //定义结构体
    char sno[6];         //注意学号为char
    char name[20];
} stu;

stu getstu(void)         //结构体函数
{
    stu tem;

    scanf("%s",tem.sno);//因为是字符串,不用加取址符&,否则此处为&p.x
    scanf("%s",tem.name);
    return tem;
}

int main()
{
	int N;
	scanf("%d",&N);//获得学生个数
    stu * stua = (stu *)malloc(N * sizeof(stua));  //动态分配了结构体变量stua的长度 

    //方法二:调用函数
	for(int i=0;i<N;i++)
	{
		stua[i] = getstu();
	 } 

	for(int i=0;i<N;i++)
	{
		printf("%s %s\n",stua[i].sno,stua[i].name);
	 }
}

输出结果:

(3)通过指针给到其他函数去赋值(如果你看到这,才到了精髓,传参赋值)

#include <stdio.h>
#include <stdlib.h>

typedef struct student {  //定义结构体
    char sno[6];         //注意学号为char
    char name[20];
} stu;

void getstu(stu *stua)         //返回值为空即可
{

    scanf("%s",stua -> sno);//因为是字符串,不用加取址符&,否则此处为&stua.x
    scanf("%s",stua -> name);
}

int main()
{
	int N;
	scanf("%d",&N);//获得学生个数
    stu * stua = (stu *)malloc(N * sizeof(stua));  //动态分配了结构体变量stua的长度 

    //方法二:函数传参赋值
	for(int i=0;i<N;i++)
	{
		getstu(&stua[i]);
	}

	for(int i=0;i<N;i++)
	{
		printf("%s %s\n",stua[i].sno,stua[i].name);
	 }
}

执行结果:

总结

到此这篇关于C语言结构体数组常用的三种赋值方法的文章就介绍到这了,更多相关C语言结构体数组赋值内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解C语言结构体中的char数组如何赋值

    目录 前景提示 一.char数组类型的处理 1.结构体初始化 2.结构体内数据赋值(简单法) 二.char数组指针类型的处理 1.结构体初始化 2.结构体内数据赋值 3.结构体内输出数据 三.全部代码 1.char数组 2.char数组指针 总结 前景提示 定义一个结构体,结构体中有两个变量,其中一个是char类型的数组,那么,怎么向这个数组中插入数据,打印数据呢? typedef struct SequenceList { // 数组的元素 char element[20]; // 数组的长度

  • C语言结构体数组同时赋值的另类用法

    说到C语言结构体数组的同时赋值,许多人一想就会想到用以下的这种方法,咱们来写一个例子: #include <stdio.h> struct student { int a; int b ; int c ; }; struct student array1[1000] ; int main(void) { int i ; for(i = 0 ; i < 1000 ; i++) { array[i].a = 1 ; array[i].b = 2 ; array[i].c = 3 ; } fo

  • C语言结构体数组常用的三种赋值方法(包含字符串)

    目录 一.按照成员变量进行赋值(麻烦,好理解,字符串赋值需要strcpy) 二.对数组整体进行赋值.(一次性需要把所有的都添加进去,不需要strcpy) (1) 在声明数组的时候,进行赋值 (2)对有规律的数据赋值,比如学生结构体的学号是有规律的. 三.使用输入进行赋值 总结 一.按照成员变量进行赋值(麻烦,好理解,字符串赋值需要strcpy) 这里使用了一个Init函数,为了在进一步说明传参的使用.实际上赋值按照需要放在主函数就行. (使用strcpy函数需要添加头文件string.h) #i

  • C语言 结构体数组详解及示例代码

    所谓结构体数组,是指数组中的每个元素都是一个结构体.在实际应用中,结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生.一个车间的职工等. 定义结构体数组和定义结构体变量的方式类似,请看下面的例子: struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 }class[5]; 表示一个班级有5个学生. 结构体数组在定义的同时也可以初始化,例如: str

  • C语言结构体数组的定义和使用详解

    目录 介绍 结构体数组定义时初始化 补充 介绍 一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗? 很明显不可能,这时就要使用数组.结构体中也有数组,称为结构体数组.它与前面讲的数值型数组几乎是一模一样的,只不过需要注意的是,结构体数组的每一个元素都是一个结构体类型的变量,都包含结构体中所有的成员项. 定义结构体数组的方法很简单,同定义结构体变量是一样的,只不过将变量改成数组.或者说同前面介绍的普通数组

  • 深入C中常用的三种排序方法总结以及探讨分析

    排序是程序设计中非常重要的内容,它的功能是将一组无序的的数据,排列成有序的数据序列,经过排列后的数据,要么是从大到小排列,要么是从小到大排列.一般也只有这两种情况. 例如我们统计班级学生的成绩,那么一般是按照学号来进行统计,原来成绩是无序排列的,这样的话非常不适合于我们对成绩的查询,那么一般我们进行成绩查询之前,先进行排序,如按照高分到低分的排序,这样可以很快地查出本班的最高分和最低分,和成绩比较靠前或靠后的学生.排序有很多种方法,常用的有三种:冒泡排序.选择排序.插入排序等,下面我们就对这三种

  • C语言对结构体数组按照某项规则进行排序的实现过程探究

    目录 前言 一.qsort()函数 二.compare()函数 1.结构体数组 2.整型数组 3.浮点型数组 三.效果图 总结 这是基于qsort()函数进行的简单排序.(附带其他类型的数组使用qsort()进行的排序) 前言 基于qsort()函数进行的排序最有用的莫过于在此对于结构体数组进行排序了.此外,若能结合函数指针,更是能够实现“想降就降,想升就升”的美好局面. 一.qsort()函数 void qsort( void *base, size_t num, size_t width,

  • C语言利用结构体数组实现学生成绩管理系统

    要求: 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).定义结构体类型描述学生信息,每个学生信息包括:学号.姓名.多门课的成绩.总成绩和平均成绩.用结构体数组作为函数参数,编程实现如下菜单驱动的学生成绩管理系统. (1) 录入每个学生的学号.姓名和各科考试成绩. (2) 计算每门课程的总分和平均分. (3) 计算每个学生的总分和平均分. (4) 按每个学生的总分由高到低排出名次表. (5) 按学号由小到大排出成绩表. (6) 按姓名的字典顺序排出成

  • C语言中使用qsort函数对自定义结构体数组进行排序

    目录 使用qsort函数对自定义结构体数组进行排序 结构体 排序函数 总体代码 C语言 qsort()函数详解 1.qsort概念介绍 2.qsort()函数实现(循序渐进式讲解) 3.小结 使用qsort函数对自定义结构体数组进行排序 qsort进行排序的数组存储的不能是结构体的指针,需要是结构体本身. 结构体 struct student{     char* id;     int mark; }arr[4], test0={"0001",80}, test1={"00

  • C语言结构体(struct)常见使用方法(细节问题)

    基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量. 结构体定义: 第一种:只有结构体定义 struct stuff{ char job[20]; int age; float height; }; 第二种:附加该结构体类型的"结构体变量"的初始化的结构体定义 //直接带变量名Huqinwei struct stuff{ char job[20]; int age; floa

随机推荐