标题:为何这段代码在Windows下编译通不过?
只看楼主
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
结帖率:91.43%
已结贴  问题点数:20 回复次数:6 
为何这段代码在Windows下编译通不过?
这段代码是我在Linux系统下写的,在Linux平台下编译能通过,运行也正常。可是发给同学的时候同学却说编译没办法通过。该同学用的是vc 6.0

我又发给了另外一个同学,他用的貌似是vs。
编译也没能通过,而且错误信息和刚刚那位同学还不一样。

这是我的代码:
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define MEMBER_MALLOC (struct member*)malloc(sizeof(struct member))

struct member
{
    int num;
    int password;
    struct member *next;
};

struct member* input(int *count_ptr, int *M_ptr)
{
    int i = 1;
    struct member *head = NULL, *tail = NULL;
    printf("请输入人数: ");
    scanf("%d", count_ptr);
    printf("请输入M: ");
    scanf("%d", M_ptr);
    printf("请依次输入密码");
    
    //创建循环链表
    for (; i <= *count_ptr; i++)
    {
        struct member *node = MEMBER_MALLOC;
        scanf("%d", &(node->password));
        node->num = i;
        node->next = NULL;

        if (NULL == head)
            head = tail = node;
        else
        {
            tail->next = node;
            tail = node;
        }

        //如果是最后一个节点,则把它的Next指向头节点
        if (i == *count_ptr)
            node->next = head;
    }
    return head;
}

void run(struct member* list, int *count_ptr, int *M_ptr)
{
    int ct = 0;             //计数器
    
    //让last指向最后一个元素,让current指向第一个元素
    struct member *current, *last;
    last = current = list;

    while (last->next != current)
        last = last->next;

    //开始删人
    while (1 != (*count_ptr - ct))
    {
        int flag;

        //找到要删除的人
        for(flag = 1; flag != *M_ptr; flag++)
        {
            current = current->next;
            last = last->next;
        }
        
        //删人,从链表中移除,计数器加一
        ct++;
        struct member* temp = current;
        current = current->next;
        last->next = current;
        printf("%d\n", temp->num);
        *M_ptr = temp->password;
        free(temp);
    }
    printf("%d\n", current->num);
    //删除最后一个人
    free(current);
}
int main()
{
    int count;              //人数
    int M;                  //M
    struct member *list = NULL;
    list = input(&count, &M);
    run(list, &count, &M);
    return 0;
}


源代码也能在这里看到:
各位同学能不能帮我编译下

[ 本帖最后由 thlgood 于 2012-9-4 16:21 编辑 ]
搜索更多相关主题的帖子: Linux member Windows 
2012-09-04 16:19
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
得分:4 
记得在源文件的头部标准文件信息
/*
 *XXXXX.cxx
 *
 */

/*
 *XXXX.c
 *
 */

.pp后缀可以
.c后缀是问题
2012-09-04 17:31
senpujituan
Rank: 4
等 级:业余侠客
帖 子:91
专家分:203
注 册:2012-6-29
得分:4 
版主说的极是,我也碰到过这种问题。拼死找错误,原来是文件后缀的问题。
2012-09-04 18:08
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:4 
不知道问题解决没有?
2012-09-05 00:49
zhangqi_gsts
Rank: 6Rank: 6
来 自:甘肃天水
等 级:侠之大者
威 望:1
帖 子:227
专家分:457
注 册:2011-3-27
得分:4 
先赞一个
2012-09-05 08:49
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
得分:4 
cpp可以编译通过,
如果是改成C,通不过,
只需要改一下,既可以.cpp/.c都可以编译。楼主可以在linux里面虚拟一个windows进行代码测试。

    //开始删人
    while (1 != (*count_ptr - ct))
    {
        int flag;
    struct member* temp;

        //找到要删除的人
        for(flag = 1; flag != *M_ptr; flag++)
        {
            current = current->next;
            last = last->next;
        }
        
        //删人,从链表中移除,计数器加一
        ct++;
        temp = current;
        current = current->next;
        last->next = current;
        printf("%d\n", temp->num);
        *M_ptr = temp->password;
        free(temp);
    }
2012-09-05 10:28
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
得分:0 
回复 6楼 newdos
额。。。。对对,应该是这里的问题。。我用的是gcc,变量可以不在作用域最前面声明

o(∩∩)Linux & Python 群:187367181
2012-09-05 17:09



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




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

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