|
查看: 1517|回复: 10
|
请C语言的高手来帮帮忙 ><"
[复制链接]
|
|
|
本帖最后由 sheung92 于 16-5-2011 01:49 PM 编辑
小弟有个问题想问问,输入资料后要如何才能让我输入要增加多少个,然后又会从新输出我之前的资料加新增的资料?以下是小弟自己写的code,请高手帮帮忙~ ><"
- #include <stdio.h>
- #include <stdlib.h>
- struct data {
- char name[10];
- int s1,s2,s3;
- struct data *next;
- };
- typedef struct data DATA;
- int main(void) {
- int i,num;
- DATA *first, *current, *previous;
-
- printf("List Is Empty!\n");
- system("pause");
-
- printf("Number of Data: ");
- scanf("%d",&num);
-
- for(i=0;i<num;i++) {
- current=(DATA *) malloc(sizeof(DATA));
- printf("Name Of Student: ");
- scanf("%s",&(current->name));
- printf("Score 1: ");
- scanf("%d",&(current->s1));
- printf("Score 2: ");
- scanf("%d",&(current->s2));
- printf("Score 3: ");
- scanf("%d",&(current->s3));
- if(i==0)
- first=current;
- else
- previous->next=current;
- current->next=NULL;
- previous=current;
- }
-
- printf("Name\tS1\tS2\tS3\n");
-
- current=first;
- while(current!=NULL) {
- printf("%s\t",current);
- printf("%d\t",current->s1);
- printf("%d\t",current->s2);
- printf("%d\n",current->s3);
- current=current->next;
- }
- system("pause");
- return 0;
- }
复制代码 |
|
|
|
|
|
|
|
|
|
|
发表于 16-5-2011 10:12 AM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 16-5-2011 11:21 AM
|
显示全部楼层
回复 2# geekman
1.)我面对的问题=在我输入了几笔资料和显示出来后,要用什么方法去可以再添加多几笔资料,在显示时不会把之前的资料删除,新增的会接在下面~2.)我的疑问=比如我一直添加资料,之前的不会不见,而在显示资料时会显示出来,新添加的资料都会添加在之前的资料下面~ |
|
|
|
|
|
|
|
|
|
|
发表于 16-5-2011 01:08 PM
|
显示全部楼层
本帖最后由 geekman 于 16-5-2011 01:28 PM 编辑
你的data使用了single direction linked list,目的就是能够(理论上)无限制的添加数据。但是,你的程式限制了能够输入的数据数量(num)。如果你要能够继续输入更多的数据,那就不要应该用num来限制,而是应该用loop来限制:
- bool isEnd = false;
- //....
- while(isEnd != true)
- {
- //do what ever
- if(end condition meet)
- {
- isEnd = true;
- }
- }
复制代码 例如你可以设定一个menu:
- Please Select an Operation:
- 1) Enter Data
- 2) Print Data
- 3) End Program
复制代码 当用户输入 1 时就执行你之前所做的数据输入程式,输入 2 时就执行列印数据的程式,输入 3 的时候就是把isEnd设定为true,停止loop,结束你的整个程式。
当然,你的输入程式必须记忆是否已经输入过数据,以免每次进入输入数据的loop都得重新initialize第一笔数据,那就会洗掉旧的数据了(甚至造成memory leak)。
对了,上面的程式,你malloc了memory,却没有free memory。Lab Test的话会fail的哦。还有previous并没有alloc,也没有assign,你确定你的code可以compile?? |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 16-5-2011 01:34 PM
|
显示全部楼层
回复 4# geekman
其实code我只是参考书里的来写~所以可能写到不完整~所以就得请大大教教我 ><"
小弟只是个还在读书的菜鸟~说到写程式根本没什么会~ ><" |
|
|
|
|
|
|
|
|
|
|
发表于 16-5-2011 01:40 PM
|
显示全部楼层
你还犯了个很大的错误:你的struct里面,name的data type是int,而后来你竟然尝试把一个string assign去int?
你没有compile过你的code的吗?这些error都会被compiler捕抓到的。
如果已经学到 linked list 应该已经不是菜鸟了,那已经是中等阶级的技巧了。如果你是越级打怪。。。被打趴了扣经验值也是应该的了。。。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 16-5-2011 01:45 PM
|
显示全部楼层
本帖最后由 sheung92 于 16-5-2011 01:47 PM 编辑
回复 6# geekman
哦~因为我之前试其它东西时改掉忘了改回char~ ><"
没办法~老师要我们做啊~ ><"
加上他只给我看过他做的结果,就要自己想办法做~ ><"
大大,你有空教我吗? ><" |
|
|
|
|
|
|
|
|
|
|
发表于 20-5-2011 04:54 PM
|
显示全部楼层
1.老师要什么INPUT和OUPUT?
2.最好把ALLOCATE和DEALLOCATE分成两个FUNCTION...用PASS BY POINTER/RETURN VALUE.比较容易DEBUG....全部放在MAIN看到 |
|
|
|
|
|
|
|
|
|
|
发表于 20-5-2011 06:43 PM
|
显示全部楼层
1.老师要什么INPUT和OUPUT?
2.最好把ALLOCATE和DEALLOCATE分成两个FUNCTION...用PASS BY POINTER/RETURN V ...
aquamax 发表于 20-5-2011 04:54 PM 
好像在学习程式的工作原理多过学编程  |
|
|
|
|
|
|
|
|
|
|
发表于 20-5-2011 08:19 PM
|
显示全部楼层
回复 7# sheung92
说得好像是为了老师才学的, 而不是为了自己..
你几岁了? 小学生? |
|
|
|
|
|
|
|
|
|
|
发表于 20-5-2011 09:45 PM
|
显示全部楼层
好像在学习程式的工作原理多过学编程
megablue 发表于 20-5-2011 06:43 PM 
其实编程讲来讲去嘛不是三DUK屁...
SEQUENTIAL, SELECTION, LOOPING... |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|