向目标进发 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日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分