c语言结构体数组赋值

Python020

c语言结构体数组赋值,第1张

(1)用字符常量逐个初始化数组。例如:

char a[8]={'i','l','o','v','e','y','o','u'};

把8个字符依次分别赋给c[0]~c[7]这8个元素。

如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。

如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')。

如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。

例如:char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m'};

这时c数组的长度自动定为9。也可以定义和初始化一个二维字符数组,例如:

char diamond[5][5]={{'','','#'},{'','#','','#'},{'#','','','','#'},

{'','#','','#'},{'','','#'}}用它代表一个菱形的平面图形。

(2)字符串常量初始化数组。例如:

char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m'};

可写为:char c[]={"C program"};

或去掉{}写为:char c[]="C program"

注意:此时数组c的长度不是9,而是10。因为字符串常量的最后由系统加上一个'\0'。上面的初始化与下面的初始化等价。

char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m','\0'};

扩展资料:

其定义的一般形式是:char数组名[数据长度]

例如:

char c[10]

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'

以上定义了c为字符数组,包含10个元素。

由于字符型数据是以整数形式(ASCII代码)存放的,因此也可以用整型数组来存放字符数据,例如:

int c[10]

但这时每个数组元素占2个字节的内存单元,浪费存储空间。

字符数组也可以是二维或多维数组,例如:

char c[5][10]

即为二维字符数组。

初始化

字符数组的初始化与数值型数组初始化没有本质区别。但它除了可以逐个给数组元素赋予字符外,也可以直接用字符串对其初始化。

输入输出

字符数组的输入

(1)用getchar()或scanf()的'%c'格式符对数组进行字符赋值。例如,对于数组a[10]:用getchar()赋值:

for(i=0i&lt10i++)

a&lti&gt=getchar()

用scanf()赋值:

for(i=0i&lt10i++)

scanf("%c",&a&lti&gt)

(2)用scanf()的'%s'格式对数组赋值。还是对于数组a[10]:

scanf("%s",a)

scanf("%s“,&a[0])

输入”C program“并回车时,a数组会自动包含一个以”\0“结尾的字符串”C program“。

字符数组的输出

(1)用putchar()或printf()的‘%c’格式符对数组进行字符赋值。例如,对于数组a[10]:用putchar()赋值:

for(i=0i&lt10i++)

a&lti&gt=putchar()

用printf()赋值:

for(i=0i&lt10i++)

printf("%c",a&lti&gt)

输出结果为:

c program

(2)用printf()的'%s'格式对数组赋值。还是对于数组a[10]

printf("%s",a)

输出结果为:

c program

参考资料:

百度百科——字符数组

分类: 电脑/网络 >>程序设计 >>其他编程语言

问题描述:

结构体数组赋值问题我在使用结构体数组的时候遇到这个问题,想了好长时间也没弄明白其中的原因,程序如下:

main()

{

struct abc

{

char name

int a

float b

}

struct abc stu[3]

int i

printf("please input:\n")

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

scanf("%c %d %f",&stu[i].name,&stu[i].a,&stu[i].b)

printf("you just input:\n")

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

printf("%-5c%-10d%-10.2f",stu[i].name,stu[i].a,stu[i].b)

}

这是一个试验程序,在给结构体数组赋值后就原样输出以验证赋值是否正确。但是程序执行时没有显示结果即退出。把结构体数组改成只有一个结构体变量,程序如下:

main()

{

struct abc

{

char name

int a

float b

}

struct abc stu

printf("please input:\n")

scanf("%c %d %f",&stu.name,&stu.a,&stu.b)

printf("%5c%10d%10.2f",stu.name,stu.a,stu.b)

}

编译执行,可以得到预期结果。我想验证是不是循环的问题,又将程序改成下面这样:不用求输入数据,而在程序内部给结构体变量数组赋初值,然后再用循环输出,程序如下:

main()

{

struct abc

{char name

int a

float b

}

struct abc stu[3] = {{'a',12,34},{'b',56,78},{'c',90,12}}

int i

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

printf("\n%-5c%-10d%-10.2f",stu[i].name,stu[i].a,stu[i].b)

}

编译执行,能够得到正确结果。最后确定只是在对结构体数组各元素成员以循环方式输入数值的时候出了问题,即第一个程序加粗的两行。但是我百思不得其解,不知究竟是什么原因。请大家帮忙解决一下。

解析:

之所以出现你说的问题,是因为当执行

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

scanf("%c %d %f",&stu[i].name,&stu[i].a,&stu[i].b)

这步的时候,由于回车也算是一个字符,循环的时候把回车也赋给name了/所以输出的时候就会错误了.想解决这个问题只要把回车那个字符给吃掉就可以了.把这个循环改成:

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

{

scanf("%c %d %f",&stu[i].name,&stu[i].a,&stu[i].b)

getchar()

}

就没问题了.