代碼如下
#define _CRT_SECURE_NO_WARNINGS//vs報scanf警告
#include<stdio.h>
#include<string.h>
struct Student
{
char name[20];
char age;
char sex;
};
int main() {
struct Student st[] = { {"aaa",25,1},{"bbb",40,0}, {"ccc",30,1},{"ddd",34,1},{"eee",79,0} };//聲明且初始化
int num = sizeof(st) / sizeof(st[0]);//計算出成員數量
printf("%d\n", sizeof(st));//這裡輸出結構體數組st所占的內存大小,這裡是110byte,5個成員,每個成員22byte
for (int i = 0; i < num; i++)//冒泡排序,以年齡排序
{
for (int j = 0; j < num - i; j++)
{
if (st[j].age > st[j + 1].age)
{
st[num] = st[j];//這裡我突發奇想把大的放置在數組後面,程序運行起來沒問題,不知道實際上能不能這樣???
st[j] = st[j + 1];
st[j + 1] = st[num];
}
}
}
scanf("%20s", st[5].name);//向數組添加新成員
scanf("%d", &st[5].age);
scanf("%d", &st[5].sex);
num = sizeof(st) / sizeof(st[0]);//問題來了!這裡怎麼還是5,不是6呢????那怎麼輸出新成員的信息呢???
printf("%d\n", sizeof(st));
for (int i = 0; i < num;i++)
{
printf("%s,%d,%d\n", st[i].name, st[i].age, st[i].sex);
}
return 0;
}