向目标进发 2021-11-21 10:54 采纳率: 0%
浏览 13
已结题

C语言,请教下链表与scanf的打印问题。

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

想要现实的功能:链表插入时,每次都要输入数据,但发现打印3次,计算机只叫我输入2次。而且没办法打印中文。

问题相关代码,请勿粘贴截图
//定义全局变量
static int length = 0;

//定义数据域
typedef struct Data
{
    char name;
    int num;

}List_data;

//定义指针域
typedef struct field
{
    List_data Data;
    field* next;

}List_field;

//创建头节点
List_field* middlehead(void)
{
    List_field* headnode = (List_field*)malloc(sizeof(List_field));
    headnode->next = NULL;
    
    return headnode;
}

//创建中间结点
List_field* middlehead(int data)
{
    List_field* node = (List_field*)malloc(sizeof(List_field));
    node->Data.num = data;
    printf("请输入记录的数据:\n");
    scanf_s("%c", (char*)&node->Data.name, sizeof(node->Data.name));
    printf("*********\n");

    node->next = NULL;
    return node;
}

//打印函数
void printflist(List_field* headnode)
{
    List_field* printfdata = headnode->next;
    while (printfdata)
    {
        printf("编号为:%d,数据为:%c\n", printfdata->Data.num, printfdata->Data.name);
        printfdata = printfdata->next;
    }
    printf("\n");

}

//插入节点
void listinser(List_field* node, int data)
{
    List_field* listData = middlehead(data);
    listData->next = node->next;
    node->next = listData;

    length++;
}

//主函数
int main(void)
{
    List_field* list = middlehead();

    listinser(list, 1);
    listinser(list, 5);
    listinser(list, 3);
    printflist(list);
    printf("%d\t", length);
    //listdelet(list,5);
    printflist(list);

    return 0;
} 

运行结果及报错内容

img

我想要达到的结果

请教博友:为什么第2次的scanf_s被吃掉了?!

  • 写回答

1条回答 默认 最新

  • 向目标进发 2021-11-21 14:30
    关注

    知道问题在哪个,是%c的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月29日
  • 已采纳回答 11月21日
  • 创建了问题 11月21日

悬赏问题

  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗