c语言打印数据到文本

问题遇到的现象和发生背景

打印字符数组到文本文件,性别那个数组会把下一个数组的内容包括进来,输入的时候是按了回车的,调试的时候发现性别那个数组没有结束符,请问各位怎么解决?

问题相关代码,请勿粘贴截图

这是输入的代码:
Status Importlist(Link& L, int n) //n为要输入的链表中的结点个数
{
if (n <= 0)
{
cout << "学生个数错误!" << endl;
return error;
}
int i;
LinkList p; //p为结构体指针
for (i = 1; i <= n; i++)
{
p = new LNode[1];
cout << i << "、" << endl;
cout << "姓名:"; cin >> p->data.name;

    cout << "年龄:"; cin >> p->data.age;
    
    cout << "学号:"; cin >> p->data.num;
    
    cout << "性别:"; cin >> p->data.sex;

    cout << "籍贯:"; cin >> p->data.place;
    p->next = NULL;   L.tail->next = p;    L.tail = p;
    L.length++;
    system("cls");  //清屏
}
cout << "此时的学生的数量为:" << L.length << endl;
return OK;

}//初始化学生信息

这是打印数组到文本文件的代码:
Status Writelist(Link L)
{
if (L.head->next == NULL)
{
cout << "错误,无法存储数据!" << endl;
return error;
}
FILE* fp;
errno_t err;
LinkList p = L.head->next;
if ((err = fopen_s(&fp, "test", "w")) != 0)
{
printf("error,cannot open this file\n");
return error;
exit(1);
}
while (p != NULL)
{
fprintf(fp, "%s (后面还有54个%s)", p->data.name, p->data.age, p->data.num, p->data.sex, p->data.place);/fwrite(&(p->data), sizeof(Person), 1, fp);/
p = p->next;
}
cout << "数据存储成功!" << endl;
fclose(fp);
return OK;
}//存储数据

运行结果及报错内容

img

img

我的解答思路和尝试过的方法
我想要达到的结果

正常打印

img


因为性别字符串设计的字符数组 char sex[2] 数组小了,汉字占两个字节,结束符'\0' 没地方放了,将结构体的性别参数修改为 char sex[4]

那个是(后面还有4个%s),因为太多%s不让过,只能这样了