c语言结构体中的一个char数组怎么赋值
发布时间:2025-05-13 08:28:50 发布人:远客网络
一、c语言结构体中的一个char数组怎么赋值
1、(1)用字符常量逐个初始化数组。例如:
2、char a[8]={'i','l','o','v','e','y','o','u'};
3、把8个字符依次分别赋给c[0]~c[7]这8个元素。
4、如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。
5、如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')。
6、如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。
7、例如:char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m'};
8、这时c数组的长度自动定为9。也可以定义和初始化一个二维字符数组,例如:
9、char diamond[5][5]={{'','','#'},{'','#','','#'},{'#','','','','#'},
10、{'','#','','#'},{'','','#'}};用它代表一个菱形的平面图形。
11、(2)字符串常量初始化数组。例如:
12、char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m'};
13、可写为:char c[]={"C program"};
14、或去掉{}写为:char c[]="C program";
15、注意:此时数组c的长度不是9,而是10。因为字符串常量的最后由系统加上一个'\0'。上面的初始化与下面的初始化等价。
16、char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m','\0'};
17、其定义的一般形式是:char数组名[数据长度]
18、c[0]='I';c[1]='';c[2]='l';c[3]='o';c[4]='v';c[5]='e';c[6]='';c[7]='y';c[8]='o';c[9]='u';
19、以上定义了c为字符数组,包含10个元素。
20、由于字符型数据是以整数形式(ASCII代码)存放的,因此也可以用整型数组来存放字符数据,例如:
21、但这时每个数组元素占2个字节的内存单元,浪费存储空间。
22、字符数组也可以是二维或多维数组,例如:
23、字符数组的初始化与数值型数组初始化没有本质区别。但它除了可以逐个给数组元素赋予字符外,也可以直接用字符串对其初始化。
24、(1)用getchar()或scanf()的'%c'格式符对数组进行字符赋值。例如,对于数组a[10]:用getchar()赋值:
25、scanf("%c",&a<i>);
26、(2)用scanf()的'%s'格式对数组赋值。还是对于数组a[10]:
27、输入”C program“并回车时,a数组会自动包含一个以”\0“结尾的字符串”C program“。
28、(1)用putchar()或printf()的‘%c’格式符对数组进行字符赋值。例如,对于数组a[10]:用putchar()赋值:
29、printf("%c",a<i>);
30、(2)用printf()的'%s'格式对数组赋值。还是对于数组a[10];
二、C语言中怎么给一个结构体用scanf进行赋值
结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存。
举例:编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数
struct student//建立结构体,学号,姓名,3门课的分数
}Stu[5];//初始化,一共5个学生的数据
void getScore(struct student* p)//函数:向结构体读取分数,一共三门课
scanf_s("%d",(&(p+i)->score[j]));
void getNum(struct student* p)//函数:向结构体读取学号
scanf_s("%d",&(p+ i)->num);
void getName(struct student* p)//函数:向结构体读取姓名
scanf("%s",&(p+ i)->name);
int i, j, average[3]={ 0};//average数组储存每门课的平均分
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("%f",(float)average[i]/5);//打印三门课平均分
scanf("%c%c%c",&a,&b,&c);
则把'd'赋予a,''(空格)赋予b,'e'赋予c。因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此把''作为下一个字符送给b。
只有当输入为:def(字符间无空格)时,才能把'd'赋于a,'e'赋予b,'f'赋予c。
int scanf(const char* restrict format,...);
函数 scanf()是从标准输入流stdin [1](标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
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。
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);
注意:&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(计算机语言函数)
三、c语言结构体函数指针怎么赋值
1、指针就是指向内存的某个地址的一个变量。
2、结构体指针就是这个指针变量的值必须指向存放该结构体的内存位置。
3、当这个指针没有任何指向时,可以赋值为null值,但是改指针不可使用,程序中应该做判断。下面是一些赋值演示。
4、struct student*p= null;//结构体指针p初始化赋值为null
5、struct student*p2=&aaa;//p2指向aaa
6、struct student*p3=(struct student*)malloc(sizeof(struct student));//内存中申请一个结构体空间,并将地址强制转换为结构体指针变量赋值给p3