c语言结构体难度不大的问题,求解决

#include 
#include 
int main()
{
    int N,i;
    scanf("%d",&N);
    struct student
    {

        char r[20];
        int b,c,d;

    } stu[N];
    for(i=0; istrcpy(stu[i].r,"\0");
    }
    for(i=0; iscanf("%s %d %d",stu[i].r,&stu[i].b,&stu[i].c);
        stu[i].d=stu[i].c*1000+stu[i].b;
    }
    printf("\n");
    for(i=0; iprintf("%s %d\n",stu[i].r,stu[i].d);
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/33311007027613.png "#left")

    }
    return 0;
}

题目:现有N名销售人员,每名销售人员的工资由基本工资与绩效组成,其中绩效为当月成功订单金额中抽成10%,现给出每名销售人员的基本情况,输出每名销售人员的姓名与工资情况。

img

为什么第五个数据中的名字最后输出的时候会多出来PG两个字母?我尝试过对结构体中的数组赋空格的初值,发现最后还是有这两个字母,求告知原因和解决方法。

望采纳,有问题再沟通

  • 这个问题是由于使用 strcpy 函数将字符串 "\0" 复制到 stu[i].r 中时出现的。
  • strcpy 函数的作用是将一个字符串的内容复制到另一个字符串中。然而,在这种情况下,stu[i].r 是一个字符数组,而不是一个指向字符串的指针。因此,使用 strcpy 函数将字符串 "\0" 复制到 stu[i].r 中时,会将字符串 "\0" 中的所有字符(即'\0')复制到 stu[i].r 中。
  • 此外,在使用 scanf 函数读入字符串时,字符串后面会自动添加一个空字符'\0',因此最终会在 stu[i].r 中有两个空字符'\0',导致最后输出的字符串中多出了两个空字符'\0'。
  • 要解决这个问题,可以使用 memset 函数将 stu[i].r 中的每个字符都设为'\0',或者直接使用 stu[i].r = {0} 初始化字符数组。
memset(stu[i].r, 0, sizeof(stu[i].r));

或者:

stu[i].r = {0};

数组开大一点,你那个字符刚好20个超出了数组 r 的范围,没输出一串奇怪的东西就不错了

img