学了一年的C++今天帮同学搞个 C 程序, 写出来居然不合适了. 呵呵

lonelyforest 2005-12-17 09:36:14
程序如下:
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct member)


typedef struct member {
int e_id;
char e_name[20];
char e_sex;
int e_age;
char e_class[20];
int e_level; /*级别 */
char e_Status[10]; /*身份 */
char e_Achievement[100]; /*成果 */
struct e_member *next;
} Member;


int main(int argc, char *argv[])
{
Member *member_head;
Member *member1;

member_head->next = member1;
scanf("%s", member_head->next);

member_head->next = (struct member *) malloc(LEN);
member_head->next->next = (struct member * ) malloc(LEN);

printf("%s", member_head->next);

system("PAUSE");
return 0;
}

本来是想定义一个 member 结构, 如果是 c++ 就好了, 简单多了. 但是我的编译器却总是报错. 我都受不了了.晕到. 环境: Windows XP sp2, Dev C++ 4.9.9.2 , 还是更新了的. 不知道什么原因. 搞的我很郁闷啊 .
...全文
648 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lonelyforest 2005-12-21
  • 打赏
  • 举报
回复
多谢大家关心,如今已经有点眉目了, http://blog.csdn.net/lonelyforest/archive/2005/12/21/557934.aspx 这里有, 如果有兴趣的朋友可以看看, 发的时候好的, 但是看了似乎很乱不知道怎么会事.
tb01412 2005-12-21
  • 打赏
  • 举报
回复
在C++中可以直接利用构造函数来给自己初始化(包括申请空间),而在C中,你如果使用自定义类型的一个指针变量的话,就需要用malloc来分配空间了
jinjiajie 2005-12-20
  • 打赏
  • 举报
回复
我也想问struct e_member *next; 的问题,e_member到底是什么结构?没定义阿?按搂主的意思是member嘛,难道还有什么特殊的地方导致e_member可以指向member这个结构
将就点 2005-12-20
  • 打赏
  • 举报
回复
我还是看不懂struct e_member *next; 是什么意思啊?
yeqihong 2005-12-20
  • 打赏
  • 举报
回复
设计后怎么管理和应用呢?采用c/s或b/s呢?小弟也很菜,希望能跟大哥学学。
rwxybh 2005-12-20
  • 打赏
  • 举报
回复
程序如下:
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct member)


typedef struct member {
int e_id;
char e_name[20];
char e_sex;
int e_age;
char e_class[20];
int e_level; /*级别 */
char e_Status[10]; /*身份 */
char e_Achievement[100]; /*成果 */
struct e_member *next; //类型声明错误
} Member;


int main(int argc, char *argv[])
{
Member *member_head;
Member *member1;

member_head->next = member1;//没有申请空间,使用野指针
scanf("%s", member_head->next);//类型不匹配,将字符串赋给结构体指针

member_head->next = (struct member *) malloc(LEN);
member_head->next->next = (struct member * ) malloc(LEN);

printf("%s", member_head->next); //类型不匹配

system("PAUSE");//没有申请空间
return 0;
}
真够乱的,不知所云

SnowwhiteYqw 2005-12-18
  • 打赏
  • 举报
回复
这程序里的scanf和printf很有问题。
首先你没分配空间就scanf,其次member_head->next 到底是什么类型?
没人知道,可你为什么写s%呢?
我觉得你发贴的时候要说清楚题目,还有检查一下自己是否写错字发生笔误了?
nanhaochen 2005-12-18
  • 打赏
  • 举报
回复
楼主使用指针是切记申请内存,就算不申请,最好让其指向空
utstar 2005-12-18
  • 打赏
  • 举报
回复
c++也不会怎么样吧
lonelyforest 2005-12-18
  • 打赏
  • 举报
回复
已经通过编译,而且基本正确了。
lonelyforest 2005-12-18
  • 打赏
  • 举报
回复
多谢大家关心, 今天下午重新写了以下, 呵呵 基本把连表搞定了, 大家建议指正一下:
#include <stdio.h>
#include <stdlib.h>

#define LEN sizeof(struct member)
#define newMember (Member)malloc(LEN)
static int id = 0 ; /*为每个会员分配唯一的ID号*/


typedef struct member {
int e_id;
char e_name[20];
char e_sex;
int e_age;
char e_class[20];
int e_level; /*级别 */
char e_Status[10]; /*身份 */
char e_Achievement[100]; /*成果 */
struct e_member *next;
} *Member;


void add_member() /*add members information*/
{
}

Member create_member()
{
Member p;

p=newMember;
if( !p ) {printf("\n malloc errer....\n"); exit(0);}

p->e_id = id++;
strcpy(p->e_name, "unnamed");
p->e_sex = 'm';
p->e_age = 21;
strcpy(p->e_class, "class1");
p->e_level = 0; /*级别 */
strcpy(p->e_Status, "member"); /*身份 */
strcpy(p->e_Achievement, " have not registed");
p->next = NULL;

printf("create_member()\n");
return p;
}

void display( ) /*display the members information*/
{


}

void save() /*save the members information to the disk*/
{

}


void load_member() /*读入 */
{

}

void show_member(Member head)
{
Member p = head->next;

printf("ID\t name \t sex\tage\tclass \tlevel\tStatus\t Achievement \n");

while(p) {
printf("%d\t%s\t%3c\t%d\t%s\t %d\t%s\t%s\n",
p->e_id, p->e_name,p->e_sex,p->e_age,p->e_class,
p->e_level, p->e_Status, p->e_Achievement );
p = p->next;
}

return;
}


void find_member() /* 查找 */
{

}

void insert_member() /*插入 */
{

}

void delete_member() /*删除 */
{

}

void free_memery( Member head )
{

Member p = head->next;
Member q;
while(p != NULL ){
q = p;
printf(" free memery with struct id : %d \n", q->e_id);
p = p->next;

free(q);

}
}


int main(int argc, char *argv[])
{
struct member head;
Member p,q;
int i = 10;

p = create_member();
head.next =p;
while ( i-- >0 ) {
p->next = create_member();
p = p->next;
}

show_member(&head);

free_memery(&head);


system("PAUSE");
return 0;
}

/* 程序目的就是创建一个会员信息连表, 要完成几个基本的功能, 函数都还没写呢, 呵呵,其实主要的是要存储在磁盘上呢, 那个部分我还没有开始设计,希望大家给些建议。 谢谢!!! */
睡在床板下_ 2005-12-18
  • 打赏
  • 举报
回复
c++学久了就这样, 同学要我 用c写 链表,我 想了半天 .楞是想不出来该怎么写~~
theory88 2005-12-18
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct member)


typedef struct member {
int e_id;
char e_name[20];
char e_sex;
int e_age;
char e_class[20];
int e_level; /*级别 */
char e_Status[10]; /*身份 */
char e_Achievement[100]; /*成果 */
struct e_member *next; //这个 e_member 哪来的
} Member;


int main(int argc, char *argv[])
{
Member *member_head;
Member *member1;

member_head->next = member1; //member1先要赋值
scanf("%s", member_head->next); //类型不匹配

member_head->next = (struct member *) malloc(LEN);
member_head->next->next = (struct member * ) malloc(LEN);

printf("%s", member_head->next);

system("PAUSE");
return 0;
}
Wolf0403 2005-12-18
  • 打赏
  • 举报
回复
似楼主这样的,改 C++ 照样不行……
0黄瓜0 2005-12-18
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct member)


typedef struct member {
int e_id;
char e_name[20];
char e_sex;
int e_age;
char e_class[20];
int e_level; /*级别 */
char e_Status[10]; /*身份 */
char e_Achievement[100]; /*成果 */
struct member * next;
} Member;


int main(int argc, char *argv[])
{
Member *member_head=(struct member *) malloc(LEN);//一个指针,必须分配空间或指向已有的常量、变量、函数才有意义。
Member *member1 = (struct member * ) malloc(LEN);
member_head->next=member1;
// scanf("%s", member_head->next);//不能为一个结构指针赋值
scanf("%d", &member_head->e_age);//
printf("%d", member_head->e_age);

system("PAUSE");
return 0;
}
hulingfeng211 2005-12-17
  • 打赏
  • 举报
回复
你把它放在c++界面里,程序改动如下就可以了,但是就是不能writen ,
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct member)


typedef struct member {
int e_id;
char e_name[20];
char e_sex;
int e_age;
char e_class[20];
int e_level; /*级别 */
char e_Status[10]; /*身份 */
char e_Achievement[100]; /*成果 */
struct member *next;
} Member;


int main(int argc, char *argv[])
{
Member *member_head;
Member *member1;
member_head->next = (struct member *) malloc(LEN);
member_head->next->next = (struct member * ) malloc(LEN);

member_head->next = member1;
scanf("%s", member_head->next);



printf("%s", member_head->next);

system("PAUSE");
return 0;
}
sugelade 2005-12-17
  • 打赏
  • 举报
回复
Member *member_head;或者去掉*,或者malloc一个。
hiji 2005-12-17
  • 打赏
  • 举报
回复
奇怪的程序
ma100 2005-12-17
  • 打赏
  • 举报
回复
struct member *next;
dx30611 2005-12-17
  • 打赏
  • 举报
回复
程序到底想实现什么功能
请LZ说清楚,member_head->next = member1;内存没有申请空间就赋值
而且也不知道你要输入什么东西,名字也有错误

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧