Chinaunix

标题: 一个简单的C语言问题 [打印本页]

作者: sea313081574    时间: 2006-10-18 21:22
标题: 一个简单的C语言问题
哪位大侠救一下命 吧,我怎么找也找不到错误,但是怎么调就是调不出来,我也不知道错在哪里了,我是一个C语言的初学者。







#define MAXSIZE 100     
#define OK 1
#define ERROR 0
#define INCREATSIZE 10
typedef struct { char name[20];/*定义一个结构体*/
int worknumber;}work,*worker;

typedef struct {                         /*定义一个结构体*/
worker Elem;
int length;
int listsize;}*sqlist;

enterdata(sqlist L){                                /*要求输入姓名和号码,输入函数*/
int i;
printf("please enter the worker's total:\n");
scanf("%d",&L->length);
for(i=1;i<=L->length;i++){
printf("the %d worker's name :",i);
scanf("%s",L->Elem.name);
printf("\n");
printf("please enter the %d worker's worknumber:",i);
scanf("%d",&L->Elem.worknumber);
printf("\n");}
}

creatlist(sqlist L){                                   /*建立顺序表,分配空间*/
L->Elem=(worker)malloc(MAXSIZE*sizeof(work));
if(!L->Elem) exit(ERROR);
L->length=0;
L->listsize=MAXSIZE;
return OK;}

outputlist(sqlist L){                      /*输出刚才输入的信息*/
int i;
printf("the worker' data is:\n");
for(i=1;i<=L->length;i++)
printf("%s  ",L->Elem.name);
printf("\n");
for(i=1;i<=L->length;i++)
printf("%d  ",L->Elem.worknumber);
printf("\n");}


main(){                  /*主函数*/
sqlist L1;

creatlist(L1);

enterdata(L1);

outputlist(L1);

}

[ 本帖最后由 sea313081574 于 2006-10-19 21:13 编辑 ]
作者: langue    时间: 2006-10-18 21:24
你的程序好乱!

(或许这就是你调不出来的根本原因之一?)
作者: Raser    时间: 2006-10-18 21:26
1.你的程序想干什么?
2.你想让你的程序怎么干?
3.在怎样的测试中出现问题?
作者: sea313081574    时间: 2006-10-18 21:29
标题: 我是发帖人
我的程序主要是想建立一个顺序表,它里面的元素是一个结构体;调试过程中,我都没有输出语句,但是它输出了一大串的乱七八糟的东西,我不知道为什么???

[ 本帖最后由 sea313081574 于 2006-10-18 21:32 编辑 ]
作者: sea313081574    时间: 2006-10-18 21:31
不是链表,而是一个顺序表,说错了
作者: langue    时间: 2006-10-18 21:48
楼主帖子惊现 “[i]”
作者: 王紫豪    时间: 2006-10-18 22:32
你的注释真牛b,“定义一个结构体”,“主函数”
作者: lenovo    时间: 2006-10-18 22:47
不知道你的这段程序从何而来,
既然是初学者,还是老老实实先把教材上的例子弄懂吧。
作者: lovesaka    时间: 2006-10-19 02:34
经典的靠墙式代码
作者: doyourself    时间: 2006-10-19 13:26
原帖由 sea313081574 于 2006-10-18 21:29 发表
我的程序主要是想建立一个顺序表,它里面的元素是一个结构体;调试过程中,我都没有输出语句,但是它输出了一大串的乱七八糟的东西,我不知道为什么???

那是编译没有通过...
没有输出乱七八糟的编译器,只有编写得乱七八糟的程序...
你的那个insertworker在哪? 火星么?
typedef 这么用是什么意思?
注释不需要这么写...难道我在第一行应该写/* 嗯,这个可能是个c 程序? will be fixed :(*/
又问你,你的那个sqlist的指针指向哪里?
嗯,如果是抄的,给个原文...

[ 本帖最后由 doyourself 于 2006-10-19 13:30 编辑 ]
作者: flw    时间: 2006-10-19 13:45
楼主我给你加工了一下,你看看是不是自己能找到问题呢?
我用
  1. indent <<EOF -kr -br -i4 -ts4 -nut > ttt.c
复制代码
生成的。
  1. #define MAXSIZE 100
  2. #define OK 1
  3. #define ERROR 0
  4. #define INCREATSIZE 10
  5. typedef struct {
  6.     char name[20];              /*定义一个结构体 */
  7.     int worknumber;
  8. } work, *worker;

  9. typedef struct {                /*定义一个结构体 */
  10.     worker Elem;
  11.     int length;
  12.     int listsize;
  13. } *sqlist;

  14. enterdata(sqlist L)
  15. {                               /*要求输入姓名和号码,输入函数 */
  16.     int i;
  17.     printf("please enter the worker's total:\n");
  18.     scanf("%d", &L->length);
  19.     for (i = 1; i <= L->length; i++) {
  20.         printf("the %d worker's name :", i);
  21.         scanf("%s", L->Elem.name);
  22.         printf("\n");
  23.         printf("please enter the %d worker's worknumber:", i);
  24.         scanf("%d", &L->Elem.worknumber);
  25.         printf("\n");
  26.     }
  27. }

  28. creatlist(sqlist L)
  29. {                               /*建立顺序表,分配空间 */
  30.     L->Elem = (worker) malloc(MAXSIZE * sizeof(work));
  31.     if (!L->Elem)
  32.         exit(ERROR);
  33.     L->length = 0;
  34.     L->listsize = MAXSIZE;
  35.     return OK;
  36. }

  37. outputlist(sqlist L)
  38. {                               /*输出刚才输入的信息 */
  39.     int i;
  40.     printf("the worker' data is:\n");
  41.     for (i = 1; i <= L->length; i++)
  42.         printf("%s  ", L->Elem.name);
  43.     printf("\n");
  44.     for (i = 1; i <= L->length; i++)
  45.         printf("%d  ", L->Elem.worknumber);
  46.     printf("\n");
  47. }


  48. main()
  49. {                               /*主函数 */
  50.     sqlist L1;

  51.     creatlist(L1);

  52.     enterdata(L1);

  53.     outputlist(L1);

  54.     insertworker(L1);

  55.     outputlist(L1);
  56. }
复制代码

作者: doyourself    时间: 2006-10-19 13:51
flw,算了,这个根本没写完,而且估计自己都没想清楚怎么写的...等他自己来说吧
作者: chzht001    时间: 2006-10-19 14:21
原帖由 flw 于 2006-10-19 13:45 发表
楼主我给你加工了一下,你看看是不是自己能找到问题呢?
我用
  1. indent <<EOF -kr -br -i4 -ts4 -nut > ttt.c
复制代码
生成的。
[code]#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define ...


忍不住说一声: 牛
作者: cuicp    时间: 2006-10-19 17:33
我改了一下,不过没有作错误chuli,比如说输入整数等,代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define MAXSIZE 100     
#define OK 1
#define ERROR 0
#define INCREATSIZE 10
typedef struct { char name[20];/*定义一个结构体*/
int worknumber;}work,*worker;

typedef struct {                         /*定义一个结构体*/
worker *Elem;
int length;
int listsize;}*sqlist;
//typedef sqlist_t* sqlist;

void enterdata(sqlist L){                                /*要求输入姓名和号码,输入函数*/
int i;
printf("please enter the worker's total:\n");
scanf("%d",&(L->length));
for(i=1;i<=L->length;i++){
printf("the %d worker's name :",i);
scanf("%s",((L->Elem)[i])->name);
printf("\n");
printf("please enter the %d worker's worknumber:",i);
scanf("%d",&(((L->Elem)[i])->worknumber));
printf("\n");
}
}

void creatlist(sqlist L){                                   /*建立顺序表,分配空间*/
L->Elem=(worker*)malloc(MAXSIZE*sizeof(worker));
int i = 0;
for(i = 0; i < MAXSIZE; i++){
        (L->Elem)[i] = (worker)malloc(MAXSIZE*sizeof(work));
}
if(!L->Elem) exit(ERROR);
L->length=0;
L->listsize=MAXSIZE;
return;}

void outputlist(sqlist L){                      /*输出刚才输入的信息*/
int i;
printf("the worker' data is:\n");
for(i=1;i<=L->length;i++){
printf("%s  ",((L->Elem)[i])->name);
printf("%d", ((L->Elem)[i])->worknumber);
printf("\n");
}
}


int main(){                  /*主函数*/
sqlist L1;

creatlist(L1);

enterdata(L1);

outputlist(L1);

//insertworker(L1);

//outputlist(L1);
return 0;
}


执行:
please enter the worker's total:
2
the 1 worker's name :sdfasdfhd

please enter the 1 worker's worknumber:3

the 2 worker's name :ds

please enter the 2 worker's worknumber:3

the worker' data is:
sdfasdfhd  3
ds  3
作者: langue    时间: 2006-10-19 18:51
原帖由 chzht001 于 2006-10-19 14:21 发表


忍不住说一声: 牛


顺便说一声,indent(1) 不能解决所有问题。
作者: sea313081574    时间: 2006-10-19 21:17
标题: 回复上面那位仁兄的
这段程序是我自己写的,编译是通过了,但是就是达不到预期的结果。
作者: cuicp    时间: 2006-10-20 09:06
昨天想了想,按照楼主和flw想法好像也可以实现!代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define MAXSIZE 100     
#define OK 1
#define ERROR 0
#define INCREATSIZE 10
typedef struct { char name[20];/*定义一个结构体*/
int worknumber;}work,*worker;

typedef struct {                         /*定义一个结构体*/
worker Elem;
int length;
int listsize;}*sqlist;
//typedef sqlist_t* sqlist;

void enterdata(sqlist L){                                /*要求输入姓名和号码,输入函数*/
int i;
printf("please enter the worker's total:\n");
scanf("%d",&(L->length));
for(i=1;i<=L->length;i++){
printf("the %d worker's name :",i);
scanf("%s",((L->Elem) + i)->name);
printf("\n");
printf("please enter the %d worker's worknumber:",i);
scanf("%d",&(((L->Elem) + i)->worknumber));
printf("\n");
}
}

void creatlist(sqlist L){                                   /*建立顺序表,分配空间*/
L->Elem = (worker) malloc(MAXSIZE * sizeof(work));
if(!L->Elem) exit(ERROR);
L->length=0;
L->listsize=MAXSIZE;
return;}

void outputlist(sqlist L){                      /*输出刚才输入的信息*/
int i;
printf("the worker' data is:\n");
for(i=1;i<=L->length;i++){
printf("%s  ",((L->Elem) + i)->name);
printf("%d", ((L->Elem) + i)->worknumber);
printf("\n");
}
}


int main(){                  /*主函数*/
sqlist L1;

creatlist(L1);

enterdata(L1);

outputlist(L1);

//insertworker(L1);

//outputlist(L1);
return 0;
}


可是执行时出错:

please enter the worker's total:
2
the 1 worker's name :asfdsf

please enter the 1 worker's worknumber:4

the 2 worker's name :sfdsafsffsdaf

please enter the 2 worker's worknumber:6

the worker' data is:
asfdsf  4
sfdsafsffsdaf  6
Inconsistency detected by ld.so: dl-fini.c: 66: _dl_fini: Assertion `i == _rtld_local._dl_nloaded' failed!


最后一句话不知道为什么!
那位解释一下?
谢谢!!
作者: sithui    时间: 2006-10-20 11:50
代码帖得太乱,看了就不舒服




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2