當前位置:首頁 » 編程語言 » c語言輸出一個結構體
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言輸出一個結構體

發布時間: 2022-08-28 12:29:36

c語言中如何實現對結構體的查找以及輸出

C語言的結構體是一組數據的組合,並不是簡單的單一類型。所以在查找和輸出的時候,均不能直接操作,而是要進行變通。
1 查找。
對於以某一項為關鍵字進行查找時,比如在結構體中有int型的成員a,要查找a為100的結構體變數,這時需要遍歷每個結構體(數組、鏈表、或者其它任意形式),對每個元素的成員a值進行比較,符合的則表示查找成功。
對於結構體中元素較多,同時要對整個結構體每個元素都匹配才算查找到的特殊情況,可以使用memcmp的方式,整體進行比較,以減少代碼量。不過這種情況較為少見,不過多描述。

2 輸出。
對於結構體的輸出,其實就是對其每一項,或者若干項成員變數的輸出。
所以可以使用基本的輸出函數,對每一項單獨輸出,輸出中為了方便閱讀,可以加一些說明文字。
如果對結構體輸出有多處調用的需求,可以在將該功能封裝為函數,供各個需要的函數調用。這樣的好處是,當結構體的成員出現變化,或者結構體輸出要求更改時,修改一處代碼即可完成所有的輸出修改,實現易於維護的效果。

❷ c語言結構體數組的輸入輸出

C

語言中,結構體(struct)是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。

結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問

定義與聲明

結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。

在實際應用中,C語言結構體數組常被用來表示一個擁有相同數據結構的群體,比如一個班的學生、一個車間的職工等。

在C語言中,定義結構體數組和定義結構體變數的方式類似;

例:

struct stu{

char*name;//姓名

int num;//學號

int age;//年齡

char group;//所在小組

float score;//成績

}class[5];

表示一個班級有5個學生。

(2)c語言輸出一個結構體擴展閱讀:

結構體數組的引用與引用一個結構體變數在原理上是一樣的。只不過結構體數組中有多個結構體變數,我們只需利用for循環一個一個地使用結構體數組中的元素。

下面編寫一個程序,編程要求:從鍵盤輸入5個學生的基本信息,如姓名、年齡、性別、學號,然後將學號最大的學生的基本信息輸出到屏幕。

#include<stdio.h>

#include<string.h>

struct STU

{

char name[20];

int age;

char sex;

char num[20];

};

void OutputSTU(struct STU stu[5]);

//函數聲明,該函數的功能是輸出學號最大的學生信息

int main(void)

{

int i;

struct STU stu[5];

for(i=0;i<5;++i)

{

printf("請輸入第%d個學生的信息:",i+1);

scanf("%s%d%c%s",

stu<i>.name,

&stu<i>

.age,&stu<i>

.sex,stu<

i>.num);/*%c

前面要加空格,不然輸入時會將空格賦給%c*/

}

OutputSTU(stu);

return 0;

}

void OutputSTU(struct STU stu[5])

{

struct STU stumax=stu[0];

int j;

for(j=1;j<5;++j)

{

if(strcmp(stumax.num,stu[j]

.num)<0)//strcmp函數的使用

{

stumax=stu[j];

}

}

printf("學生姓名:%s學生年齡:%d學生性別:%c學生學號:

%s ",stumax.name,

stumax.age,stumax.

sex,stumax.num);

}

輸出結果是:

請輸入第1個學生的信息:小紅22 F Z1207031

請輸入第2個學生的信息:小明21 M Z1207035

請輸入第3個學生的信息:小七23 F Z1207022

請輸入第4個學生的信息:小欣20 F Z1207015

請輸入第5個學生的信息:小天19 M Z1207024

學生姓名:小明學生年齡:21學生性別:M學生學號:Z1207035

❸ c語言結構體輸入及輸出問題

gets(stu[i].name);這句前面加上getchar();
因為gets函數會接受來自上一次輸入遺留的回車符從而直接結束函數
還有你的
printf("\nthe
number
is:%d\n",stu[0].score);
是不是應該改成
printf("\nthe
number
is:%d\n",stu[i].score);

❹ c語言的一個結構體

是位域
即:一個16位的無符號整數,其中:
correctIndex 佔2位
burst_count 佔2位
redWhichNumber 佔2位
blueWhichNumber 佔2位
burst_moment 佔1位
exitidle 佔1位
status 佔4位
null 佔2位

相關知識:

有些信息在存儲時,並不需要佔用一個完整的位元組, 而只需占幾個或一個二進制位。例如在存放一個開關量時,只有0和1 兩種狀態, 用一位二進位即可。為了節省存儲空間,並使處理簡便,C語言又提供了一種數據結構,稱為「位域」或「位段」。所謂「位域」是把一個位元組中的二進位劃分為幾個不同的區域, 並說明每個區域的位數。每個域有一個域名,允許在程序中按域名進行操作。 這樣就可以把幾個不同的對象用一個位元組的二進制位域來表示。一、位域的定義和位域變數的說明位域定義與結構定義相仿,其形式為:

struct 位域結構名

{ 位域列表 };

其中位域列表的形式為: 類型說明符 位域名:位域長度

例如:

struct bs
{
int a:8;
int b:2;
int c:6;
};

位域變數的說明與結構變數說明的方式相同。 可採用先定義後說明,同時定義說明或者直接說明這三種方式。例如:

struct bs
{
int a:8;
int b:2;
int c:6;
}data;

說明data為bs變數,共占兩個位元組。其中位域a佔8位,位域b佔2位,位域c佔6位。對於位域的定義尚有以下幾點說明:

1. 一個位域必須存儲在同一個位元組中,不能跨兩個位元組。如一個位元組所剩空間不夠存放另一位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如:

struct bs
{
unsigned a:4
unsigned :0 /*空域*/
unsigned b:4 /*從下一單元開始存放*/
unsigned c:4
}

在這個位域定義中,a占第一位元組的4位,後4位填0表示不使用,b從第二位元組開始,佔用4位,c佔用4位。

2. 由於位域不允許跨兩個位元組,因此位域的長度不能大於一個位元組的長度,也就是說不能超過8位二進位。

3. 位域可以無位域名,這時它只用來作填充或調整位置。無名的位域是不能使用的。例如:

struct k
{
int a:1
int :2 /*該2位不能使用*/
int b:3
int c:2
};

從以上分析可以看出,位域在本質上就是一種結構類型, 不過其成員是按二進位分配的。

二、位域的使用

位域的使用和結構成員的使用相同,其一般形式為: 位域變數名·位域名 位域允許用各種格式輸出。

main(){
struct bs
{
unsigned a:1;
unsigned b:3;
unsigned c:4;
} bit,*pbit;
bit.a=1;
bit.b=7;
bit.c=15;
printf("%d,%d,%d\n",bit.a,bit.b,bit.c);
pbit=&bit;
pbit->a=0;
pbit->b&=3;
pbit->c|=1;
printf("%d,%d,%d\n",pbit->a,pbit->b,pbit->c);
}

上常式序中定義了位域結構bs,三個位域為a,b,c。說明了bs類型的變數bit和指向bs類型的指針變數pbit。這表示位域也是可以使用指針的。

程序的9、10、11三行分別給三個位域賦值。( 應注意賦值不能超過該位域的允許范圍)程序第12行以整型量格式輸出三個域的內容。第13行把位域變數bit的地址送給指針變數pbit。第14行用指針方式給位域a重新賦值,賦為0。第15行使用了復合的位運算符"&=", 該行相當於: pbit->b=pbit->b&3位域b中原有值為7,與3作按位與運算的結果為3(111&011=011,十進制值為3)。同樣,程序第16行中使用了復合位運算"|=", 相當於: pbit->c=pbit->c|1其結果為15。程序第17行用指針方式輸出了這三個域的值。

❺ 關於C語言結構體輸出的問題

把結構體中的soccer數組改成 double 就行了
double soccer[3];

float在c、c++中會經常出現類似的錯誤
所以我一般用double
----
strcpy(stu.name,"Li Li");stu.name是字元串首地址(指針)
你去看MSDN中的strcpy參數說明就知道了

------
那是C語言的規定啊,就想引用一樣,要使用引用就必須要在生命的時候賦值。畢竟字元數組和字元串是有區別的。

❻ c語言中 輸出單向鏈表中的一個結構體的內容

你的描述讓我看不懂。我默認為你要問的是:給出鏈表的頭指針,輸出鏈表中某個結構體(結點)的內容。
下面是偽代碼:
voidprint(Node *head){
if(head==null) return;

if(head 是要輸出的結點)

輸出head指向的結點的內容;
else

print(head->next);

}

❼ C語言一個簡單的結構體輸出不知道哪裡錯了!

這是改好的

#include<stdio.h>
intmain(void)

{
structstudent
{
intnum;
charname[100];
charsex;
charadr[100];
}student1={10010,"sanpao",'m',"kaixinguo"};
printf("NO.=%d name=%s sex=%c adr=%s ",
student1.num,student1.name,student1.sex,student1.adr);
return0;
}

❽ C語言結構體輸出

structbeixuanzhe
{
charname[20];
intxuanpiao;
}sb1={"sb1",0},sb2={"sb2",0},sb3={"sb3",0};

假如這是定義的結構體那麼輸出如下

printf("name=%s,xuanpiao=%d
",sb1.name,sb1.xuanpiao);
printf("name=%s,xuanpiao=%d ",sb2.name,sb2.xuanpiao);
printf("name=%s,xuanpiao=%d ",sb3.name,sb3.xuanpiao);

❾ C語言關於結構體的輸入輸出

void input(struct book* p)
{
//scanf("%d,%s,%d,%d",&p->a,p->num,&p->pub.year,&p->pub.month);
//這里 char num[9];數組,按字元串輸入 %s不能以逗號分隔,函數無法識別輸入結束!
//改成:
scanf("%d %s %d %d",&p->a,p->num,&p->pub.year,&p->pub.month);
//輸入以空格分格就可以了!
}

❿ C語言,結構體定義的輸入輸出函數

結構體的輸入輸出與一般的一樣,但是不能整體對結構體進行輸入輸出,只能對其成員分個輸入輸出,比如結構體struct
student{
int
number;
char
name[20]}..................輸入學號可以用scanf("%d",&number);輸入姓名scanf("%s",name);........................當然,你也可以使用gets();之類的,只要記住對其成員輸入輸出就行,純手打,滿意請採納,謝謝O(∩_∩)O~