关于C语言结构体的一个程序,总是显示有错误,大佬们帮忙看下

2025-03-19 16:01:31
推荐回答(1个)
回答1:

// 结构体数组person[5]原有五个记录: zhou,wu,li,zheng,wang
// 现在,需要在zheng的位置增加1个记录test,那么,zheng和wang就相应往后移动.
// 测试时输入:
// test 33 2000
// 输出6个记录

#include
#include //需要调用strcpy()

//staff[5]与struct staff的名称一样,建议将staff[5]改为其它名称,例如 person[5]
struct staff
{
    char name[20];
    int age;
    float salary;
}person[5]={{"zhou",22,1500},{"wu",29,1200},{"li",30,900},{"zheng",32,900},{"wang",29,990}};

//原代码struct staff 1[6];  //变量名怎么看似是数字"1"? 将其改为其它名称,例如 L
struct staff L[6];

int main()
{
    int i;  //int j; //j可以不用
    int k;

    //这些 staff a[3].name 不需要在变量前面加staff

     //原代码scanf("%s%d%d",staff a[3].name,staff a[3].age,staff a[3].salary);
    //for(i=0;i<3;i++)
    //    staff 1[i]=staff[i];
    //for(j=3;j<=5;j++)
    //    staff 1[j+1]=staff[j];

    //手工输入一个记录. 浮点float用%f. &L[3].age和&L[3].salary前面要加&
    scanf("%s%d%f",L[3].name,&L[3].age,&L[3].salary);

    for(i=0;i<3;i++)
    {
        strcpy(L[i].name,person[i].name); //字符串的赋值用函数strcpy()
        L[i].age=person[i].age;
        L[i].salary=person[i].salary;
    }
    for(i=3;i<5;i++) //i不能等于5,因为person[5]的下标范围是0到4
    {
        strcpy(L[i+1].name,person[i].name); //字符串的赋值用函数strcpy()
        L[i+1].age=person[i].age;
        L[i+1].salary=person[i].salary;
    }

    for(k=0;k<6;k++) //屏幕输出6个记录
    {
       printf("%s %d %0.2f",L[k].name,L[k].age,L[k].salary); //%0.2f"表示保留2位小数
       printf("\n"); //每个记录要隔行
    }
    //原代码printf("%s%d%d",staff 1[k].name,staff 1[k].age,staff 1[k].salary);

    return 0;
}