墨古134 2020-03-30 17:52 采纳率: 0%
浏览 189

用了scanf函数却要输入两次,真奇怪啊

代码如下
图片说明
图片说明

以下是完整代码(不想看的可以忽略)

#include <stdio.h>
#include <stdlib.h>
/************************************/
/* 链表实现的头文件,文件名slnklist.h */
/************************************/
 typedef int datatype;
 typedef struct link_node{
   datatype info;
   struct link_node *next;
 }node;

/*****************************************************/
/*  函数功能:建立一个空的单链表                     */
/*  函数参数:无                                     */
/*  函数返回值:指向node类型变量的指针              */
/*  文件名:slnklist.c,函数名:init()                    */
/******************************************************/
 node *init() /*建立一个空的单链表*/
 {
   return NULL;
 }

/****************************************************/
/*  函数功能:输出单链表中各个结点的值              */
/*  函数参数:指向node类型变量的指针head           */
/*  函数返回值:空                                  */
/*  文件名slnklist.c,函数名display()                  */
/*****************************************************/
 void display(node *head)
 {
   node *p;
   p=head;
   if(!p) printf("单链表是空的!\n");
   else
     {
       printf("单链表各个结点的值为:");
       while(p) { printf("%5d",p->info);p=p->next;}
     }
    printf("\n");
 }



//尾插法建立单链表
node *creatlistr(node *head)
{
    node *p=head,*r=NULL;
    datatype x;
    printf("请输入单链表各结点值(用0结束):");
    scanf("%d",&x);
    while(x)   
    {
        p=(node*)malloc(sizeof(node));
        p->info=x;
        if(head==NULL)
            head=p;
        else
            r->next=p;
        r=p;
        scanf("%d",&x);
    }
    if(r!=NULL)
        r->next=NULL;
    return head;
}


//查找倒数第n个结点
node *rearfind(node *head)
{
    int i,n;
    node *pre=head,*p=head;
    printf("请输入要查找倒数第几个结点值:");
    scanf("%d",&n);
    if(n<1)
    {
        printf("非法输入!");
        return NULL;
    }
    else
    {
        for(i=0;i<n;i++)
            p=p->next;
        while(p)
        {
            pre=pre->next;
            p=p->next;
        }
        return pre;
    }
}


void main()
{
    node *head=init();
    head=creatlistr(head);
    display(head);
    if(rearfind(head))
        printf("找到了,是%d",rearfind(head)->info);
}
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 16:24
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿