鱼C论坛

 找回密码
 立即注册
查看: 4293|回复: 8

纠结了好久的问题

[复制链接]
发表于 2011-12-18 12:51:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码:

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. typedef struct
  4. {
  5. int len;
  6. int cnt;
  7. int *pbase;
  8. }Arr;
  9. void Init(Arr *p)
  10. {
  11. p->pbase=(int *)malloc(sizeof(int) * 5);
  12. if(NULL == p->pbase)
  13. {
  14. printf("动态内存分配失败\n");
  15. exit(-1);
  16. }

  17. int i;
  18. for(i=0; i<5; i++)
  19. {
  20. printf("请输入第%d个数据:", i+1);
  21. scanf("%d\n", &(p->pbase[i]));
  22. printf("第%d个数据是:%d ", i+1,p->pbase[i]);
  23. }
  24. p->len = 5;
  25. p->cnt = 5;

  26. return ;
  27. }

  28. void show(Arr *p)
  29. {
  30. printf("5个数据分别是:");
  31. int i;
  32. for(i=0; i<p->cnt; i++)
  33. {
  34. printf("%d ", p->pbase[i]);
  35. }

  36. return;
  37. }
  38. void main(void)
  39. {
  40. Arr a;
  41. Init(&a);
  42. show(&a);

  43. return;
  44. }
复制代码
输出结果居然是:
请输入第1个数据:12
23
第1个数据是:12   请输入第2个数据:34
第2个数据是:23   请输入第3个数据:45
第3个数据是:34   请输入第4个数据:56
第4个数据是:45   请输入第5个数据:67
第5个数据是:56   5个数据分别是:12   23   34   45   56   Press any key to continu

之前遇到过类似的问题,没在意,前几天又遇到了这个的问题,所以开始思考了,几天了,想不出是什么原因。
求各位大哥大姐给小弟解释解释,感激不尽!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-20 19:08:55 | 显示全部楼层
搞出来没?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-21 12:34:18 | 显示全部楼层
这些天很忙所以没有上来看,你这问题是出现在scanf()函数的应用,
scanf("%d\n", &(p->pbase));

\n是换行符,加入\n后,表示你输入一个整型数后还要输入一个,然后敲回车。去掉就可以解决问题了。

我还想问问你
int cnt;

好像与len一样,我不知道有什么意义,哈哈,我也顺便改了一下代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct
  4. {
  5. int len;
  6. int cnt;
  7. int *pbase;
  8. }Arr;
  9. //初始化数组
  10. void Init(Arr *p)
  11. {
  12. p->pbase=(int *)malloc(sizeof(int *)*5);//给数组分配内存
  13. p->len = 5;//初始化数组长度
  14. if(NULL == p->pbase)
  15. {
  16.   printf("动态内存分配失败\n");
  17.   exit(-1);
  18. }
  19. printf("系统获得该数组的长度为:%d\n", p->len);
  20. for(int i=0; i<p->len; i++)
  21. {
  22.   printf("请输入第%d个数据:", i+1);
  23.   scanf("%d", &(p->pbase[i]));
  24.   printf("第%d个数据是:%d ",i+1,p->pbase[i]);
  25. }
  26. printf("\n");
  27. }
  28. //显示数组
  29. void show(Arr *p)
  30. {
  31. printf("5个数据分别是:");
  32. int i;
  33. for(i=0; i<p->len; i++)
  34. {
  35.   printf("%d ", p->pbase[i]);
  36. }
  37. }
  38. void main(void)
  39. {
  40. Arr a;
  41. Init(&a);
  42. show(&a);
  43. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-21 14:44:13 | 显示全部楼层

len是数组内当前元素个数,cnt是数组长度!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-22 22:17:36 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct
  4. {
  5. int len;
  6. int cnt;
  7. int *pbase;
  8. }Arr;
  9. void Init(Arr *p)
  10. {
  11.         int i;
  12. p->pbase=(int *)malloc(sizeof(int) * 5);
  13. if(NULL == p->pbase)
  14. {
  15. printf("动态内存分配失败\n");
  16. exit(-1);
  17. }

  18. for(i=0; i<5; i++)
  19. {
  20. printf("请输入第%d个数据:", i+1);
  21. scanf("%d", &(p->pbase[i]));
  22. printf("第%d个数据是:%d ", i+1,p->pbase[i]);
  23. }
  24. p->len = 5;
  25. p->cnt = 5;

  26. return ;
  27. }

  28. void show(Arr *p)
  29. {
  30. int i;
  31. printf("5个数据分别是:");

  32. for(i=0; i<p->cnt; i++)
  33. {
  34. printf("%d ", p->pbase[i]);
  35. }

  36. return;
  37. }
  38. void main(void)
  39. {
  40. Arr a;
  41. Init(&a);
  42. show(&a);

  43. return;
  44. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-22 22:20:51 | 显示全部楼层
总的来说又两个错误,第一个就是int i,放在程序后面,定义变量时要注意一定要放在程序前,以防止有些的编译器会报错,还有就是楼上说的scanf("%d\n",&(p->pbase[i])),一般scanf不要用\n,因为这输入的时候容易出错,不知道我这样说你听得懂不

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-24 12:28:13 | 显示全部楼层
YJL 发表于 2011-12-22 22:20
总的来说又两个错误,第一个就是int i,放在程序后面,定义变量时要注意一定要放在程序前,以防止有些的编译 ...

明白了,谢谢啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-25 16:11:12 | 显示全部楼层
学会匈牙利命名法,又不加标注别人是看不懂得
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-28 21:27:48 | 显示全部楼层
紫炎 发表于 2011-12-25 16:11
学会匈牙利命名法,又不加标注别人是看不懂得

恩,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 17:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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