佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1517|回复: 10

请C语言的高手来帮帮忙 ><"

[复制链接]
发表于 15-5-2011 09:39 PM | 显示全部楼层 |阅读模式
本帖最后由 sheung92 于 16-5-2011 01:49 PM 编辑

小弟有个问题想问问,输入资料后要如何才能让我输入要增加多少个,然后又会从新输出我之前的资料加新增的资料?以下是小弟自己写的code,请高手帮帮忙~ ><"
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. struct data {
  4.        char name[10];
  5.        int s1,s2,s3;
  6.        struct data *next;
  7.        };
  8. typedef struct data DATA;

  9. int main(void) {
  10.     int i,num;
  11.     DATA *first, *current, *previous;
  12.    
  13.     printf("List Is Empty!\n");
  14.     system("pause");
  15.         
  16.     printf("Number of Data: ");
  17.     scanf("%d",&num);
  18.    
  19.     for(i=0;i<num;i++) {
  20.                        current=(DATA *) malloc(sizeof(DATA));
  21.                        printf("Name Of Student: ");
  22.                        scanf("%s",&(current->name));
  23.                        printf("Score 1: ");
  24.                        scanf("%d",&(current->s1));
  25.                        printf("Score 2: ");
  26.                        scanf("%d",&(current->s2));
  27.                        printf("Score 3: ");
  28.                        scanf("%d",&(current->s3));
  29.                        if(i==0)
  30.                            first=current;
  31.                        else
  32.                            previous->next=current;
  33.                        current->next=NULL;
  34.                        previous=current;
  35.                        }
  36.    
  37.     printf("Name\tS1\tS2\tS3\n");
  38.    
  39.     current=first;
  40.     while(current!=NULL) {
  41.                          printf("%s\t",current);
  42.                          printf("%d\t",current->s1);
  43.                          printf("%d\t",current->s2);
  44.                          printf("%d\n",current->s3);
  45.                          current=current->next;
  46.                          }

  47.     system("pause");
  48.     return 0;
  49. }
复制代码
回复

使用道具 举报


ADVERTISEMENT

发表于 16-5-2011 10:12 AM | 显示全部楼层
1)请描述你面对的问题
2)请列出你的疑问
回复

使用道具 举报

 楼主| 发表于 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来限制:

  1. bool isEnd = false;
  2. //....
  3. while(isEnd != true)
  4. {
  5.     //do what ever
  6.     if(end condition meet)
  7.     {
  8.         isEnd = true;
  9.     }
  10. }
复制代码
例如你可以设定一个menu:

  1. Please Select an Operation:
  2. 1) Enter Data
  3. 2) Print Data
  4. 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 应该已经不是菜鸟了,那已经是中等阶级的技巧了。如果你是越级打怪。。。被打趴了扣经验值也是应该的了。。。
回复

使用道具 举报

Follow Us
 楼主| 发表于 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看到
回复

使用道具 举报


ADVERTISEMENT

发表于 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...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 14-11-2025 10:07 AM , Processed in 0.121657 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表