当前位置: 代码迷 >> C语言 >> [求助] C语言,为什么一运行程序就自动关闭
  详细解决方案

[求助] C语言,为什么一运行程序就自动关闭

热度:202   发布时间:2007-03-22 19:09:08.0
[求助] C语言,为什么一运行程序就自动关闭

我是编的解决约瑟夫问题的 程序,现在要上课去了 ,没时间详细注释,源程序如下:

#include <stdio.h>
#include <malloc.h>
#define N 10
#define S 3
#define M 4
typedef struct node
{
int data;
struct node *next;
}round;

round *h;

round *creat()
{
round *p,*t;
int i;
h=(round*)malloc(sizeof(round));
h->next=NULL;
t=h;
for(i=1;i<=N;i++)
{
p=(round*)malloc(sizeof(round));
p->data=i;
p->next=NULL;
t->next=p;
t=p;
}
p->next=h->next;
p=h->next;
for(i=0;i<N;i++)
{
printf(" %d",p->data);
p=p->next;
}
printf("\n");
return(h);
}
round *new()
{
round *p,*q;
int i,n=0,a[N];
p=(round*)malloc(sizeof(round));
p->next=NULL;
p=h->next;
for(i=1;i<S;i++) p=p->next;
while(h->next!=NULL)
{
q=(round*)malloc(sizeof(round));
q->next=NULL;
for(i=1;i<M-1;i++) p=p->next;
q=p->next;
a[n]=q->data;
n++;
p->next=q->next;
free(q);
}
for(i=0;i<N;i++)
printf("%d",a[i]);
printf("\n");
}
void main()
{
creat();
new();
}

编译没错,但是 一运行就自动关闭C程序,不知道是 什么原因!
谢谢指点,我等会儿在详细注释,请大家先帮忙找找原因!!!
谢谢

搜索更多相关的解决方案: C语言  自动  运行  

----------------解决方案--------------------------------------------------------

在结尾加getch();


----------------解决方案--------------------------------------------------------
我按照你说的做了,在main中加了个getchar(),但是问题又来了,一运行出现一下错误:
TC
NTVDM CPU 遇到无效指令;
CS:6426 IP:bbe8 OP:ff ff 72 08 00 选择“关闭”终止应用程序。
关闭(c) 忽略(I)
而且只能关闭!

不知道是我的程序哪里有问题,与计算机有冲突!
哪位遇到过这种情况,请指教啊……
----------------解决方案--------------------------------------------------------
我怀疑是你的结构体定义的问题,主函数里的两个函数注释掉1个可以运行,同时运行就出现你说的问题
有可能是堆栈溢出!
----------------解决方案--------------------------------------------------------

重新写了个,看看可以不.

/* 设有n个人围坐在圆桌旁,现从第s各人开始报数,
数到第m个人出列,然后从出列的下一个人重新开始报数,
数到第m个人又出列……如此重复直到所有人都出列。
例如当n=8,m=4,s=1,得到的 新序列为:48521376 */
#include <stdio.h>
#include <malloc.h>
#define N 10 /* 定义N个人 */
#define S 3 /* 从第S各人开始报数 */
#define M 4 /* 数到第M个人出列 */
typedef struct node
{
int data;
struct node *next;
}round;

round *creat() /* 初始化链表 */
{
round *p,*t,*head;
int i;
head=(round*)malloc(sizeof(round));
head->next=NULL;
t=head;
for(i=1;i<=N;i++) /* 从表头向表尾建立单链表,也就是从1-N*/
{
p=(round*)malloc(sizeof(round));
p->data=i;
p->next=NULL;
t->next=p;
t=p;
}
p->next=head;
return(head);
}
void new_round(round *head) /* 从新排列 */
{
round *pre=head,*p=head->next;
int i=1,j=1;
while(i<N)
{
while(p!=head)
{
if(j==M)
{
pre->next=p->next;
p->next=NULL;
free(p);
p=pre->next;
j=1;
i++;
}
else
{
pre=p;
p=p->next;
j++;
}
}
pre=head;
p=head->next;
}
}

void Print(round *head)
{
round *p=head->next;
while(p!=head)
{
printf("%3d-->",p->data);
p=p->next;
}
printf("\n\n\n");
}

int main()
{
node *head;
head=creat();
Print(head);
new_round(head);
Print(head);
return 0;
}


----------------解决方案--------------------------------------------------------

谢谢你的回答
经别人指点,我知道是我定义了个new函数,这个函数系统已经有了,所以出错了
不过现在改了还是有问题!!!


----------------解决方案--------------------------------------------------------
我刚才在试你的程序的时候已经把new改为别的名称了,的确还是不行
----------------解决方案--------------------------------------------------------
  相关解决方案