| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 581 人关注过本帖
标题:为什么能编译却不能运行
只看楼主 加入收藏
qwxue
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2011-11-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
为什么能编译却不能运行
#include<stdio.h>
 #include<math.h>
 #include<stdlib.h>
#include<malloc.h>  
typedef struct student  {
int num;  char name[20];
 int old;
int phone;  
struct student*next;  }Student;
  char ch;  
Student*p,*q,*s,*head;
 Student  * creat()
{  
Student*p;
 head=(Student*)malloc(sizeof(Student));
 s=head;  head->next=NULL;  
while((ch=getchar( ))!='0' )
 {  
p=(Student*)malloc(sizeof(Student));
 printf("学号:  ");  
scanf("%d",&p->num);  
printf("姓名:  ");  
fflush(stdin);  
scanf("%s",&p->name[20]);
 printf("年龄:  ");
 scanf("%d",&p->old);
 printf("电话:  ");
  scanf("%d",&p->phone);  
s->next=p;
 s=p;  
p->next=NULL;
 printf("0键结束输入,非0键继续");
 ch=getchar( );
}
return head;
}
Student  * insert(Student*h)
 {
int x;
Student*s;
 printf("输入插入学生前面的学号:");
scanf("%d",&x);
q=head;
p=head->next;
 s=(Student*)malloc(sizeof(Student));
 printf("输入学号:");
fflush(stdin); scanf("%d",&p->num);
 printf("输入姓名:"); fflush(stdin); scanf ("%s",&p->name[20]);
printf("输入年龄:"); scanf("%d",&p->old);
 printf("输入电话"); scanf("%d",&p->phone);
while(p!=NULL&&p->num!=x) {
{  
   q=p;   
  p=p->next;
} q->next=s; s->next=p;
}
 return head;
}
void output(Student*h)
 {    p=head;  
  printf("学号         姓名           年龄             电话号码\n\n");  
  for(;p!=NULL;p=p->next)      printf("%d%s%d%d",p->num,p->name[20],p->old,p->phone);
 }  
Student* delet(Student*h)
 {
int x; printf("删除该学生信息的学号是: "); scanf("%d",&x);  p=head; while(p->next!=NULL&&p->next->num!=x)p++; if(p->next==NULL) printf("\n 该学号不存在 !"); else {q=p->next;      p->next=q->next;      free(q);
}  
return head;  
}  
void find(Student *)
{
Student*p; p=head; printf("请输入学号:  "); char x; scanf("%d",&x); while(p&&p->num!=x) p=p->next;    printf("学号         姓名           年龄             电话号码\n\n");     printf("%d%s%d%d",p->num,p->name[20],p->old,p->phone);
}
  int main()
 {   int cord;     
 do{      printf("  主菜单  \n");     printf("  1  建立线性表  \n");     printf("  2  插入一个元素 \n");     printf("  3  显示         \n");     printf("  4  删除一个元素  \n");     printf("  5  查找         \n");     printf("  6 结束程序运行  \n");     printf("----------------------\n");      printf(" 请输入您的选择(1,2,3,4,5)");       scanf("%d",&cord);  switch(cord)  {  case 1: creat();break;  case 2: insert(head);break;  case 3: output(head);break;  case 4: delet(head);break;  case 5:   find(head);break;  case 6:exit(0);  
 }  }while(cord<=6);  
 return 0;  }

[ 本帖最后由 qwxue 于 2011-11-21 21:23 编辑 ]
搜索更多相关主题的帖子: 姓名 include 
2011-11-21 21:17
cosam
Rank: 4
等 级:业余侠客
帖 子:146
专家分:259
注 册:2011-8-25
收藏
得分:1 
不要这样子嘛。
2011-11-21 21:19
qwxue
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2011-11-7
收藏
得分:0 
回复 2楼 cosam
不好意思啊。。。现在好看点了。。麻烦。。麻烦下
2011-11-21 21:24
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:1 
二楼被你的程序崩溃了。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct student
{
    int num;
    char name[20];
    int old;
    int phone;
    struct student*next;
} Student;
char ch;
Student*p,*q,*s,*head;
Student  * creat()
{
    Student*p;
    head=(Student*)malloc(sizeof(Student));
    s=head;
    head->next=NULL;
    while((ch=getchar( ))!='0' )
    {
        p=(Student*)malloc(sizeof(Student));
        printf("学号:  ");
        scanf("%d",&p->num);
        printf("姓名:  ");
        fflush(stdin);
        scanf("%s",&p->name[20]);
        printf("年龄:  ");
        scanf("%d",&p->old);
        printf("电话:  ");
        scanf("%d",&p->phone);
        s->next=p;
        s=p;
        p->next=NULL;
        printf("0键结束输入,非0键继续");
        ch=getchar( );
    }
    return head;
}
Student  * insert(Student*h)
{
    int x;
    Student*s;
    printf("输入插入学生前面的学号:");
    scanf("%d",&x);
    q=head;
    p=head->next;
    s=(Student*)malloc(sizeof(Student));
    printf("输入学号:");
    fflush(stdin);
    scanf("%d",&p->num);
    printf("输入姓名:");
    fflush(stdin);
    scanf ("%s",&p->name[20]);
    printf("输入年龄:");
    scanf("%d",&p->old);
    printf("输入电话");
    scanf("%d",&p->phone);
    while(p!=NULL&&p->num!=x)
    {
        {
            q=p;
            p=p->next;
        }
        q->next=s;
        s->next=p;
    }
    return head;
}
void output(Student*h)
{
    p=head;
    printf("学号         姓名           年龄             电话号码\n\n");
    for(; p!=NULL; p=p->next)      printf("%d%s%d%d",p->num,p->name,p->old,p->phone);
}
Student* delet(Student*h)
{
    int x;
    printf("删除该学生信息的学号是: ");
    scanf("%d",&x);
    p=head;
    while(p->next!=NULL&&p->next->num!=x)p++;
    if(p->next==NULL) printf("\n 该学号不存在 !");
    else
    {
        q=p->next;
        p->next=q->next;
        free(q);
    }
    return head;
}
void find(Student *)
{
    Student*p;
    p=head;
    printf("请输入学号:  ");
    int x;
    scanf("%d",&x);
    while(p&&p->num!=x) p=p->next;
    printf("学号         姓名           年龄             电话号码\n\n");
    printf("%d%s%d%d",p->num,p->name,p->old,p->phone);
}
int main()
{
    int cord;
    do
    {
        printf("  主菜单  \n");
        printf("  1  建立线性表  \n");
        printf("  2  插入一个元素 \n");
        printf("  3  显示         \n");
        printf("  4  删除一个元素  \n");
        printf("  5  查找         \n");
        printf("  6 结束程序运行  \n");
        printf("----------------------\n");
        printf(" 请输入您的选择(1,2,3,4,5)");
        scanf("%d",&cord);
        switch(cord)
        {
        case 1:
            creat();
            break;
        case 2:
            insert(head);
            break;
        case 3:
            output(head);
            break;
        case 4:
            delet(head);
            break;
        case 5:
            find(head);
            break;
        case 6:
            exit(0);
        }
    }
    while(cord<=6);
    return 0;
}
二楼继续修改,交给你了。

我们都在路上。。。。。
2011-11-22 11:47
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
收藏
得分:17 
唔,1天的帖子哦。

程序代码:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct student
{
    int num;
    char name[20];
    int old;
    int phone;
    struct student *next;
} Student;
char ch;
Student *p,*q,*s,*head;
Student  * creat()
{
    Student *p;
    head=(Student*)malloc(sizeof(Student));
    s=head;
    head->next=NULL;
    while((ch=getchar( ))!='0' )
    {
        p=(Student*)malloc(sizeof(Student));
        printf("学号:  ");
        scanf("%d",&p->num);
        printf("姓名:  ");
        fflush(stdin);
        scanf("%s",p->name);   //scanf("%s",&p->name[20]); 字符数组不需要取地址符也不需要加下标
        printf("年龄:  ");
        scanf("%d",&p->old);
        printf("电话:  ");
        scanf("%d",&p->phone);
        s->next=p;
        s=p;
        p->next=NULL;
        printf("0键结束输入,非0键继续");
        ch=getchar( );
    }
    return head;
}
Student  * insert(Student*h)
{
    int x;
    Student*s;
    printf("输入插入学生前面的学号:");
    scanf("%d",&x);
    q=head;
    p=head->next;         //**
    s=(Student*)malloc(sizeof(Student));
    printf("输入学号:");
    fflush(stdin);
    scanf("%d",&p->num);  //**直接覆盖掉head->next?
    printf("输入姓名:");
    fflush(stdin);
    scanf ("%s",p->name);  //scanf("%s",&p->name[20]); 字符数组不需要取地址符也不需要加下标
    printf("输入年龄:");
    scanf("%d",&p->old);
    printf("输入电话");
    scanf("%d",&p->phone);
    while(p!=NULL&&p->num!=x)
    {
        {
            q=p;
            p=p->next;
        }
        q->next=s;
        s->next=p;
    }
    return head;
}
void output(Student*h)
{
    p=head->next;                 //按照原先的会出现把head的也输出的情况
    printf("学号\t姓名\t年龄\t电话号码\n\n");
    for(; p!=NULL; p=p->next)
        printf("%d\t%s\t%d\t%d\n",p->num,p->name,p->old,p->phone); //输出格式= =
}
Student* delet(Student*h)
{
    int x;
    printf("删除该学生信息的学号是: ");
    scanf("%d",&x);
    p=head;
    while(p->next!=NULL&&p->next->num!=x)p++;
    if(p->next==NULL) printf("\n 该学号不存在 !");
    else
    {
        q=p->next;
        p->next=q->next;
        free(q);
    }
    return head;
}
void find(Student *)
{
    Student*p;
    p=head;
    printf("请输入学号:  ");
    int x;
    scanf("%d",&x);
    while(p&&p->num!=x) p=p->next;
    printf("学号         姓名           年龄             电话号码\n\n");
    printf("%d%s%d%d",p->num,p->name,p->old,p->phone);
}
int main()
{
    int cord;
    do
    {
        printf("  主菜单  \n");
        printf("  1  建立线性表  \n");
        printf("  2  插入一个元素 \n");
        printf("  3  显示         \n");
        printf("  4  删除一个元素  \n");
        printf("  5  查找         \n");
        printf("  6 结束程序运行  \n");
        printf("----------------------\n");
        printf(" 请输入您的选择(1,2,3,4,5)");
        scanf("%d",&cord);
        switch(cord)
        {
        case 1:
            creat();
            break;
        case 2:
            insert(head);
            break;
        case 3:
            output(head);
            break;
        case 4:
            delet(head);
            break;
        case 5:
            find(head);
            break;
        case 6:
            exit(0);
        }
    }
    while(cord<=6);
    return 0;
}

2011-11-22 13:37
编程弱者
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:35
专家分:103
注 册:2011-11-17
收藏
得分:1 
LZ在我这就能运行,可能在你的工程里有另外的程序,或者查找路径不对。你建个新的工程把代码拷过去试下。
2011-11-22 16:07
qwxue
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2011-11-7
收藏
得分:0 
回复 5楼 随风飘荡
谢谢。。谢谢。。谢谢。。谢谢你
2011-11-22 18:19
快速回复:为什么能编译却不能运行
数据加载中...
 
   



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

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