c語言結構體題目
A. C語言結構體問題
朋友 你碰上的是經典錯誤
首先第一個錯 pn->b/n.a*++pn->b 翻譯之後變成 b/a*(++b) = 3/1*4 = 12
第二個錯 即使按照你所描述的想法 估計按照你寫的程序 你會這樣改 :
pn->b/n.a*(++pn)->b
你肯定認為 (++pn)->b 是指向 c (也就是5.0)的吧 你試著運行 同樣錯 結果為0
根本原因:知識點理解---指針類型(此處為結構體指針)
struct x *pn 代表了pn是一個指向 struct x 類型的指針,所以,當 執行 (++pn)時,pn指針指向的地址增加的數量 等於 struct x 的位元組數 也就是 int + int + float 的位元組數 所以指向一個未知的空間 (此處的值默認為0)------------------所以並非樓主認為的變成指向 c
知識點類比:int *p = &n,當執行(++p) ,p指向的地址增加 int 的位元組數
float *p = &n 當執行(++p) ,p指向的地址增加 float 的位元組數
餘下同理......
B. C語言結構體編程題,求助大神啊
根據題意:
一、教師信息定義為結構體,其成員年月也為結構體(可直接定義成兩個成員變數,本題沒有強制要求),婚姻狀態採用共用體類型。
二、輸入信息直接寫在main函數,實際軟體開發應單獨寫輸入函數,輸入驗證我只寫了性別和婚姻狀態的驗證,其餘成員的輸入驗證需要自己添加。(實際開發,驗證也應單獨寫函數調用)。
三、輸出單獨函數。
#include <stdio.h>
typedef union maType//結婚狀態共用體
{
int type;//0未婚1已婚2離異
}MTE;
typedef struct s_date
{
int year;
int month;
}SDATE;
typedef struct teacher
{
char idNum[20];
char name[20];
int sex;//0女1男
SDATE date;
MTE mtype;
char dtName[100];//工作部門名稱
}TEER;
void printfTinfo(TEER tInfo);
int main()
{
TEER tInfo;
printf("輸入一名教師信息: ");
printf("工資卡號(20個字元):"),scanf("%s",tInfo.idNum);
printf("姓名(20個字元):"),scanf("%s",tInfo.name);
do
printf("性別(0女1男):"),scanf("%d",&tInfo.sex);
while(tInfo.sex!=0 && tInfo.sex!=1);
printf("出生年月(格式:YYYY MM):"),scanf("%d%d",&tInfo.date.year,&tInfo.date.month);
do
printf("婚姻狀態(0未婚1已婚2離異):"),scanf("%d",&tInfo.mtype.type);
while(tInfo.mtype.type!=0 && tInfo.mtype.type!=1 && tInfo.mtype.type!=2);
printfTinfo(tInfo);
return 0;
}
void printfTinfo(TEER tInfo)
{
printf(" ---------------- 輸入的信息為: ");
printf("工資卡號:%s ",tInfo.idNum);
printf("姓名:%s ",tInfo.name);
printf("性別:%s ",tInfo.sex?"男":"女");
printf("出生年月:%04d-%02d ",tInfo.date.year,tInfo.date.month);
printf("婚姻狀態:");
switch(tInfo.mtype.type)
{
case 0:printf("未婚 ");break;
case 1:printf("已婚 ");break;
case 2:printf("離異 ");break;
}
}