新聞中心
c語(yǔ)言結(jié)構(gòu)體數(shù)組賦值
(1)用字符常量逐個(gè)初始化數(shù)組。例如:
成都創(chuàng)新互聯(lián)主營(yíng)盤錦網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP軟件開(kāi)發(fā),盤錦h5微信小程序搭建,盤錦網(wǎng)站營(yíng)銷推廣歡迎盤錦等地區(qū)企業(yè)咨詢
char a[8]={'i','l','o','v','e','y','o','u'};
把8個(gè)字符依次分別賦給c[0]~c[7]這8個(gè)元素。
如果在定義字符數(shù)組時(shí)不進(jìn)行初始化,則數(shù)組中各元素的值是不可預(yù)料的。如果花括號(hào)中提供的初值個(gè)數(shù)(即字符個(gè)數(shù))大于數(shù)組長(zhǎng)度,則出現(xiàn)語(yǔ)法錯(cuò)誤。
如果初值個(gè)數(shù)小于數(shù)組長(zhǎng)度,則只將這些字符賦給數(shù)組中前面那些元素,其余的元素自動(dòng)定為空字符(即'\0')。
如果提供的初值個(gè)數(shù)與預(yù)定的數(shù)組長(zhǎng)度相同,在定義時(shí)可以省略數(shù)組長(zhǎng)度,系統(tǒng)會(huì)自動(dòng)根據(jù)初值個(gè)數(shù)確定數(shù)組長(zhǎng)度。
例如:char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m'};
這時(shí)c數(shù)組的長(zhǎng)度自動(dòng)定為9。也可以定義和初始化一個(gè)二維字符數(shù)組,例如:
char diamond[5][5]={{'','','#'},{'','#','','#'},{'#','','','','#'},
{'','#','','#'},{'','','#'}};用它代表一個(gè)菱形的平面圖形。
(2)字符串常量初始化數(shù)組。例如:
char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m'};
可寫為:char c[]={"C program"};
或去掉{}寫為:char c[]="C program";
注意:此時(shí)數(shù)組c的長(zhǎng)度不是9,而是10。因?yàn)樽址A康淖詈笥上到y(tǒng)加上一個(gè)'\0'。上面的初始化與下面的初始化等價(jià)。
char c[]={‘c’,‘’,‘p’,‘r’,‘o','g','r','a','m','\0'};
擴(kuò)展資料:
其定義的一般形式是:char數(shù)組名[數(shù)據(jù)長(zhǎng)度]
例如:
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為字符數(shù)組,包含10個(gè)元素。
由于字符型數(shù)據(jù)是以整數(shù)形式(ASCII代碼)存放的,因此也可以用整型數(shù)組來(lái)存放字符數(shù)據(jù),例如:
int c[10];
但這時(shí)每個(gè)數(shù)組元素占2個(gè)字節(jié)的內(nèi)存單元,浪費(fèi)存儲(chǔ)空間。
字符數(shù)組也可以是二維或多維數(shù)組,例如:
char c[5][10];
即為二維字符數(shù)組。
初始化
字符數(shù)組的初始化與數(shù)值型數(shù)組初始化沒(méi)有本質(zhì)區(qū)別。但它除了可以逐個(gè)給數(shù)組元素賦予字符外,也可以直接用字符串對(duì)其初始化。
輸入輸出
字符數(shù)組的輸入
(1)用getchar()或scanf()的'%c'格式符對(duì)數(shù)組進(jìn)行字符賦值。例如,對(duì)于數(shù)組a[10]:用getchar()賦值:
for(i=0;ilt;10;i++)
alt;igt;=getchar();
用scanf()賦值:
for(i=0;ilt;10;i++)
scanf("%c",alt;igt;);
(2)用scanf()的'%s'格式對(duì)數(shù)組賦值。還是對(duì)于數(shù)組a[10]:
scanf("%s",a);
或
scanf("%s“,a[0]);
輸入”C program“并回車時(shí),a數(shù)組會(huì)自動(dòng)包含一個(gè)以”\0“結(jié)尾的字符串”C program“。
字符數(shù)組的輸出
(1)用putchar()或printf()的‘%c’格式符對(duì)數(shù)組進(jìn)行字符賦值。例如,對(duì)于數(shù)組a[10]:用putchar()賦值:
for(i=0;ilt;10;i++)
alt;igt;=putchar();
用printf()賦值:
for(i=0;ilt;10;i++)
printf("%c",alt;igt;);
輸出結(jié)果為:
c program
(2)用printf()的'%s'格式對(duì)數(shù)組賦值。還是對(duì)于數(shù)組a[10];
printf("%s",a);
輸出結(jié)果為:
c program
參考資料:
百度百科——字符數(shù)組
C語(yǔ)言結(jié)構(gòu)體數(shù)組成員怎么賦值?
intmain(void){
structstudentsbao={};
printf("%d,%s\n",bao.id,bao.name);//輸出是4224528,空(應(yīng)該是null)
//structstudentsbao={3,"123"};可以。第一種賦值方法
//strcpy(bao.name,"bao");//可以,
//printf("%d,%s\n",bao.id,bao.name);
//bao.name="bao";錯(cuò)誤“stray'\351'inprogram”其他是亂碼,
//bao.name[0]='a';
//bao.name[0]='/0';
//printf("%d,%s\n",bao.id,bao.name);
/*這樣可以,*/
//chararr[10]="baobao";
////bao.name=arr;//error"assignmenttoexpressionwitharraytype"
//scanf("%s",bao.name);//可以,
//printf("%d,%s\n",bao.id,bao.name);
//所以scanf那一類函數(shù)都可以。
//還有就是memcpy函數(shù)也是可以的
return0;
}
擴(kuò)展資料
C語(yǔ)言結(jié)構(gòu)體數(shù)組的直接賦值及數(shù)組的長(zhǎng)度計(jì)算:
#includestdio.h
//自定義一個(gè)字符串的結(jié)構(gòu)體,包含字符串和字符串長(zhǎng)度兩個(gè)變量
typedefstructStr{
charch[100];
intlength;//char數(shù)組(字符串)的長(zhǎng)度
}myStr;
//剛開(kāi)始聲明變量時(shí)每個(gè)變量的字符串長(zhǎng)度length都為0
//這里以長(zhǎng)度為10的數(shù)組為例,數(shù)組長(zhǎng)度是1000
//對(duì)第0個(gè)到第9個(gè)結(jié)構(gòu)體數(shù)組的長(zhǎng)度同時(shí)賦值為0
myStrmyStr1[10]={
[0...9]={
.length=0,
}
};
intmain(){
inti;
for(i=0;i10;i++){
printf("%d\n",myStr1[i].length);
}
return0;
}
C語(yǔ)言中怎么給一個(gè)結(jié)構(gòu)體用scanf進(jìn)行賦值?
結(jié)構(gòu)體數(shù)組指針作為函數(shù)參數(shù),通過(guò)數(shù)組的首地址與偏移量對(duì)結(jié)構(gòu)體數(shù)組進(jìn)行scanf的賦值,在函數(shù)中通過(guò)指針間接訪問(wèn)到其指向的內(nèi)存。
舉例:編寫函數(shù),輸入5個(gè)學(xué)號(hào)(int),5個(gè)姓名(字符串),5個(gè)成績(jī)數(shù)組(每組三個(gè)成績(jī))(int[3]),依次調(diào)用函數(shù)
#include stdio.h
#include stdlib.h
struct student? //建立結(jié)構(gòu)體,學(xué)號(hào),姓名,3門課的分?jǐn)?shù)
{
int num;
char name[10];
int score[3];
}Stu[5];? ? ? ? ? //初始化,一共5個(gè)學(xué)生的數(shù)據(jù)
void getScore(struct student * p)? //函數(shù):向結(jié)構(gòu)體讀取分?jǐn)?shù),一共三門課
{
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)? //函數(shù):向結(jié)構(gòu)體讀取學(xué)號(hào)
{
int i;
for (i = 0; i 5;i++)
scanf_s("%d", (p + i)-num);
}
void getName(struct student * p)? //函數(shù):向結(jié)構(gòu)體讀取姓名
{
int i;
for (i = 0; i 5; i++)
scanf("%s", (p + i)-name);
}
int main()
{
int i, j, average[3] = { 0 };? ?//average數(shù)組儲(chǔ)存每門課的平均分
getNum(Stu);? ? ? ? ? ? //函數(shù)調(diào)用
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);? //依次打印學(xué)號(hào) 姓名
//printf("%d %d %d", Stu[0].score[0],Stu[0].score[1],Stu[0].score[2]);
for (j = 0; j 3; j++)? ? //打印三門課的分?jǐn)?shù)
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。因?yàn)?c 只要求讀入一個(gè)字符,后面不需要用空格作為兩個(gè)字符的間隔,因此把' '作為下一個(gè)字符送給b。
只有當(dāng)輸入為:def(字符間無(wú)空格) 時(shí),才能把'd'賦于a,'e'賦予b,'f'賦予c。
擴(kuò)展資料:
1、函數(shù)原型
int scanf(const char * restrict format,...);
函數(shù) scanf() 是從標(biāo)準(zhǔn)輸入流stdin [1]? (標(biāo)準(zhǔn)輸入設(shè)備,一般指向鍵盤)中讀內(nèi)容的通用子程序,可以說(shuō)明的格式讀入多個(gè)字符,并保存在對(duì)應(yīng)地址的變量中。
函數(shù)的第一個(gè)參數(shù)是格式字符串,它指定了輸入的格式,并按照格式說(shuō)明符解析輸入對(duì)應(yīng)位置的信息并存儲(chǔ)于可變參數(shù)列表中對(duì)應(yīng)的指針?biāo)肝恢?。每一個(gè)指針要求非空,并且與字符串中的格式符一一順次對(duì)應(yīng)。
2、返回值
scanf函數(shù)返回成功讀入的數(shù)據(jù)項(xiàng)數(shù),讀入數(shù)據(jù)時(shí)遇到了“文件結(jié)束”則返回EOF。如:
scanf("%d %d",a,b);函數(shù)返回值為int型。如果a和b都被成功讀入,那么scanf的返回值就是2;
如果只有a被成功讀入,返回值為1;如果a和b都未被成功讀入,返回值為0;如果遇到錯(cuò)誤或遇到end of file,返回值為EOF。end of file為Ctrl+z 或者Ctrl+d。
例:使用scanf函數(shù)輸入數(shù)據(jù)。
#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表示對(duì)象a在內(nèi)存中的地址,是一個(gè)右值。變量a,b,c的地址是在編譯階段分配的(存儲(chǔ)順序由編譯器決定)。
如果scanf中%d是連著寫的如“%d%d%d”,在輸入數(shù)據(jù)時(shí),數(shù)據(jù)之間不可以用逗號(hào)分隔,只能用空白字符(空格或tab鍵或者回車鍵)分隔——“2 (空格)3(tab) 4” 或 “2(tab)3(回車)4”等。若是“%d,%d,%d”,則在輸入數(shù)據(jù)時(shí)需要加“,”,如“2,3,4”。
參考資料:
百度百科——scanf(計(jì)算機(jī)語(yǔ)言函數(shù))
c語(yǔ)言結(jié)構(gòu)體函數(shù)指針怎么賦值
指針就是指向內(nèi)存的某個(gè)地址的一個(gè)變量。
結(jié)構(gòu)體指針就是這個(gè)指針變量的值必須指向存放該結(jié)構(gòu)體的內(nèi)存位置。
當(dāng)這個(gè)指針沒(méi)有任何指向時(shí),可以賦值為null值,但是改指針不可使用,程序中應(yīng)該做判斷。下面是一些賦值演示。
struct student{
int id;
int score;
} aaa;
struct student *p = null;//結(jié)構(gòu)體指針p初始化賦值為null
struct student *p2=aaa;//p2指向aaa
struct student *p3=(struct student *)malloc(sizeof(struct student));//內(nèi)存中申請(qǐng)一個(gè)結(jié)構(gòu)體空間,并將地址強(qiáng)制轉(zhuǎn)換為結(jié)構(gòu)體指針變量賦值給p3
請(qǐng)教C語(yǔ)言問(wèn)題,關(guān)于通過(guò)函數(shù)給結(jié)構(gòu)體成員賦值
不知道你這又是哪位學(xué)藝不精的C語(yǔ)言大師編的書,別的不說(shuō),那個(gè)自定義函數(shù)getdata就不規(guī)范,居然定義的時(shí)候不說(shuō)明返回值類型,這水平也真敢出書。
從main函數(shù)開(kāi)始讀,先定義一個(gè)結(jié)構(gòu)體變量a,然后調(diào)用getdata函數(shù),其參數(shù)是一個(gè)類型為指針類型的結(jié)構(gòu)體變量,功能為讀入形參結(jié)構(gòu)體變量的s和t變量,把a(bǔ)的地址傳入getdata函數(shù),然后讀入結(jié)構(gòu)體a中的s,t,然后打印s,t
名稱欄目:c語(yǔ)言結(jié)構(gòu)體賦值函數(shù),c語(yǔ)言結(jié)構(gòu)體賦值
瀏覽地址:http://m.biofuelwatch.net/article/hsdsjh.html