鱼C论坛

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

纠结了好久的问题

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

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

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

x
代码:
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
int len;
int cnt;
int *pbase;
}Arr;
void Init(Arr *p)
{
p->pbase=(int *)malloc(sizeof(int) * 5);
if(NULL == p->pbase)
{
printf("动态内存分配失败\n");
exit(-1);
}

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

return ;
}

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

return;
}
void main(void)
{
Arr a;
Init(&a);
show(&a);

return; 
}
输出结果居然是:
请输入第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一样,我不知道有什么意义,哈哈,我也顺便改了一下代码
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
 int len;
 int cnt;
 int *pbase;
}Arr;
//初始化数组
void Init(Arr *p)
{
 p->pbase=(int *)malloc(sizeof(int *)*5);//给数组分配内存
 p->len = 5;//初始化数组长度
 if(NULL == p->pbase) 
 {
  printf("动态内存分配失败\n");
  exit(-1); 
 }
 printf("系统获得该数组的长度为:%d\n", p->len);
 for(int i=0; i<p->len; i++)
 {
  printf("请输入第%d个数据:", i+1);
  scanf("%d", &(p->pbase[i]));
  printf("第%d个数据是:%d ",i+1,p->pbase[i]); 
 }
 printf("\n");
}
//显示数组
void show(Arr *p)
{ 
 printf("5个数据分别是:"); 
 int i;
 for(i=0; i<p->len; i++) 
 { 
  printf("%d ", p->pbase[i]); 
 }
}
void main(void)
{
 Arr a; 
 Init(&a);
 show(&a);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-21 14:44:13 | 显示全部楼层

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

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

return ;
}

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

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

return;
}
void main(void)
{
Arr a;
Init(&a);
show(&a);

return; 
}
想知道小甲鱼最近在做啥?请访问 -> 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-12-22 11:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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