标题:真的绝望,为了这道题用了5 6小时,主要两个问题,在以下我会表达清楚(字数 ...
取消只看楼主
q18371528148
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-6-21
结帖率:100%
已结贴  问题点数:20 回复次数:2 
真的绝望,为了这道题用了5 6小时,主要两个问题,在以下我会表达清楚(字数限制。。。)
问题一:为什么我输出的数据后面有,?...  我在贴吧问了好像是%s的问题
问题二:怎么做对啊,具体点,学结构到现在只敲对一个

程序代码:
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct stud)
#define NUll 0
struct stud
{long num;
char name[20];
char sex;
int old;
struct stud *next;
};
int n;
struct stud *creat(void)
{
    struct stud *head,*p1,*p2;
    n=0;
    p2=p1=(struct stud*)malloc(LEN);
    printf("输入:");
    scanf("%ld,%s,%c,%d",&p1->num,&p1->name,&p1->sex,&p1->old);
    head=NULL;
    while(p1->num!=0)
    {
        n=n+1;
        if(n==1)
            head=p1;
        else 
            p2->next=p1;
        p2=p1;
        p1=(struct stud*)malloc(LEN);
        printf("Input:");
        scanf("%ld,%s,%c,%d",&p1->num,&p1->name,&p1->sex,&p1->old);
    }
    p2->next=NULL;
    free(p1);
    return(head);
}
void print_list(struct stud *head)
{
    struct stud* p;
    printf("\nNow ,These %d records are:\n",n);
    p=head;
    if(head!=NUll)
    {
        while(p!=NULL)
        {printf("%ld,%s,%c,%d\n",p->num,p->name,p->sex,p->old);
        p=p->next;
        }
        
    }

}
struct stud *del( struct stud *head,int num )
{  struct stud  *p1, *p2;
    if (head==NULL) 
    {    printf("\n list is null!\n");   return head;     }  
    p1=head;
    while (num!=p1->old&&p1->next!=NULL)
    {  p2=p1;      p1=p1->next;   }
    if  ( num==p1->old )
    {  if (p1==head) 
        head=p1->next;
        else
        p2->next=p1->next;
        printf("delete:%d\n", num);
    }
    else 
        printf("%d not been found!\n",num);

    return head;
}

void main()
{
    struct stud *head;
    int del_num=0;
    printf("input records:\n");
    head=creat();
    print_list(head);
    printf("\nInput the deleted number:");
    scanf("%d",&del_num);
    head=del(head,del_num);
    print_list(head);
}
搜索更多相关主题的帖子: struct num next head printf 
2018-06-21 18:09
q18371528148
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-6-21
得分:0 
谢谢大佬们,现在大概弄了
以下是我自己的看法(错的地方请指出一下2
这是原题:建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去
我弄的正确代码
程序代码:
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct stud)
#define NUll 0
struct stud
{long num;
char name[20];
char sex;
int old;
struct stud *next;
};
int n;
struct stud *creat(void)
{
    struct stud *head,*p1,*p2;
    char a;  //用来消除%s的缓冲区
    n=0;
    p2=p1=(struct stud*)malloc(LEN);
    printf("输入:");
    scanf("%ld%s%c%c%d",&p1->num,p1->name,&a,&p1->sex,&p1->old);
    head=NULL;
    while(p1->num!=0)
    {
        n=n+1;
        if(n==1)
            head=p1;
        else 
            p2->next=p1;
        p2=p1;
        p1=(struct stud*)malloc(LEN);
        printf("Input:");
        scanf("%ld%s%c%c%d",&p1->num,p1->name,&a,&p1->sex,&p1->old);
    }
    p2->next=NULL;
    free(p1);
    return(head);
}
void print_list(struct stud *head)
{
    struct stud* p;
    printf("\nNow ,These %d records are:\n",n);
    p=head;
    if(head!=NUll)
    {
        while(p!=NULL)
        {printf("%ld,%s,%c,%d\n",p->num,p->name,p->sex,p->old);
        p=p->next;
        }
        
    }

}
struct stud *del( struct stud *head,int num )
{  struct stud  *p1, *p2;
    if (head==NULL) 
    {    printf("\n list is null!\n");   return head;     }  
    p1=head;
    while (num!=p1->old&&p1->next!=NULL)
    {  p2=p1;      p1=p1->next;   }
    if  ( num==p1->old )
    {  if (p1==head) 
        head=p1->next;
        else
        p2->next=p1->next;
        printf("delete:%d\n", num);
    }
    else 
        printf("%d not been found!\n",num);

    return head;
}

void main()
{
    struct stud *head;
    int del_num=0;
    printf("input records:\n");
    head=creat();
    print_list(head);
    printf("\nInput the deleted number:");
    scanf("%d",&del_num);
    head=del(head,del_num);
    print_list(head);
}

可以看出解决%s的问题是利用了char a来消除%s的缓冲区
原理如图

大佬们有其他想法%s这个问题的可以发表一下在此感谢以上大佬们帮助,也欢迎大家发表意见
2018-06-22 11:26
q18371528148
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-6-21
得分:0 
回复 4楼 八画小子
谢谢大佬,我试了可以
2018-06-22 11:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-488062-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.151534 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved