小王coding中 2021-10-12 22:23 采纳率: 100%
浏览 92
已结题

c语言程序没跑完就结束了

img


#include <stdio.h>
#include <stdlib.h>

typedef struct Node
{
int num;//序号
int data;//密码
struct LNode* next;
}Node, *LinkList;
int delateQ_data = 0;

LinkList IniList()
{
LinkList head;
head = (LinkList)malloc(sizeof(Node));
if (head)
head->next = NULL;
return head;
}
LinkList CreateListR(int a[], int n)
{
LinkList head = IniList;
LinkList r = head;
for (int i = 0;i < n;i++)
{
LinkList p = (LinkList)malloc(sizeof(Node));
if (p)
{
p->data = a[i];
r->next = p;
r = p;
printf("num:%d,p:%d\n", p->num, p->data);
}
}
r->next = head->next;
return head;
}
LinkList LinkDelete(LinkList* L, int i)
{
LinkList p, q;
p = *L;
int j;
for (j = 0;j < i - 1;j++)
p = p->next;
q = p->next;
p->next = q->next;
printf("num:%d 出局\n", q->num);
delateQ_data = q->data;
free(q);
return p;
}
int StartGame(LinkList *L, int n, int m)
{
LinkList q = *L;
int firstln = 1;
while (n - 1)
{
if (firstln)
{
q = LinkDelete(q, m);
firstln = 0;
}
else
q = LinkDelete(q, delateQ_data);
n--;
}
if (n == 1)
q = q->next;
return q->num;
}
int main(void)
{
int p[30], n = 0, first_m;
LinkList head;
printf("请输入初始m值:\n");
scanf_s("%d", &first_m);
printf("请依次输入密码,以非整数字符结束。\n");
while (scanf("%d", &p[n++]));
printf("参加人数:%d\n初始m值:%d\n", n - 1, first_m);
head = CreateListR(p, n - 1);
printf("游戏过程:\n");
printf(("获胜者是%d号\n", StartGame(head, n - 1, first_m)));
return 0;
}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-10-13 17:14
    关注

    修改如下,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    typedef struct Node
    {
        int  num;//序号
        int  data;//密码
        struct Node* next;     //struct LNode* next;
    }Node, * LinkList;
    int delateQ_data = 0;
    
    LinkList IniList()
    {
        LinkList head;
        head = (LinkList)malloc(sizeof(Node));
        if (!head) return NULL;
        head->next = NULL;
        return head;
    }
    LinkList CreateListR(int a[], int n)
    {
        LinkList head = IniList();//LinkList head = IniList;
        LinkList r = head;
        for (int i = 0; i < n; i++)
        {
            LinkList p = (LinkList)malloc(sizeof(Node));
            if (!p) return NULL;  //修改
            p->data = a[i];
            p->num = i + 1;      //修改
            r->next = p;
            r = p;
            printf("num:%d,p:%d\n", p->num, p->data);
        }
        r->next = head->next;  
        return head;
    }
    LinkList LinkDelete(LinkList  L, int i)//*L 修改
    {
        LinkList p, q;
        p = L;  
        int j;
        for (j = 0; j < i - 1; j++)
            p = p->next;
        q = p->next;
        p->next = q->next;
        printf("num:%d 出局\n", q->num);
        delateQ_data = q->data;
        free(q);
        return p;
    }
    int StartGame(LinkList* L, int n, int m)
    {
        LinkList q = (*L);
        int firstln = 1;
        while (n-1)  
        {
            if (firstln)
            {
                q = LinkDelete(q,m);
                firstln = 0;
            }
            else
                q = LinkDelete(q, delateQ_data);
            n--;
        }
        if (n == 1)
            q = q->next;
        return q->num;
    }
    int main(void)
    {
        int p[30], n = 0, first_m;
        LinkList head;
        printf("请输入初始m值:\n");
        scanf_s("%d", &first_m);
    
        printf("请依次输入密码,以 -1 结束输入。\n");
        while (scanf("%d", &p[n]) == 1 && p[n] != -1) n++; //修改
        
        printf("参加人数:%d\n初始m值:%d\n", n, first_m); //修改
        head = CreateListR(p, n);  //修改
    
        printf("游戏过程:\n");
        printf("获胜者是%d号\n", StartGame(&head, n-1, first_m));
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月21日
  • 已采纳回答 10月13日
  • 创建了问题 10月12日

悬赏问题

  • ¥20 fluent无法启动
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。