結構體變量通過「變量名.成員名」訪問成員,該表達式類型即為成員類型,可像普通變量一樣賦值、運算、輸入輸出。
#include <stdio.h>
int main() {
struct {
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
} a;
FILE *fp;
float wage;
char c = 'Y';
fp = fopen("wage.dat", "w"); // 創建只寫文本文件
while (c == 'Y' || c == 'y') {
printf("\nName: ");
scanf("%s", a.name);
printf("Age: ");
scanf("%d", &a.age); // 修正:原代碼誤用 &a.wage
printf("Sex: ");
scanf("%s", a.sex); // 修正:原代碼誤用 %d
printf("Dept: ");
scanf("%s", a.depart);
printf("Wage1: "); scanf("%f", &a.wage1);
printf("Wage2: "); scanf("%f", &a.wage2);
printf("Wage3: "); scanf("%f", &a.wage3);
printf("Wage4: "); scanf("%f", &a.wage4);
printf("Wage5: "); scanf("%f", &a.wage5);
wage = a.wage1 + a.wage2 + a.wage3 + a.wage4 + a.wage5;
printf("The sum of wage is %6.2f\n", wage);
fprintf(fp, "%10s%4d%4s%30s%10.2f\n",
a.name, a.age, a.sex, a.depart, wage);
while (1) {
printf("Continue? ");
c = getche();
if (c=='Y'||c=='y'||c=='N'||c=='n') break;
}
}
fclose(fp);
return 0;
}
scanf("%d", &a.wage) → 修正為 &a.agescanf("%d", a.sex) → 修正為 %s 並去掉 &(數組名即地址)return 0; 與標準 int main()b = a;(ANSI C 支持同類型結構體直接賦值)fopen/fprintf/fclose%10s %4d 等此例展示了結構體作為數據記錄載體,配合文件 I/O 實現持久化存儲的典型模式。