纠结了好久的问题
代码:#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));
printf("第%d个数据是:%d ", i+1,p->pbase);
}
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);
}
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
之前遇到过类似的问题,没在意,前几天又遇到了这个的问题,所以开始思考了,几天了,想不出是什么原因。
求各位大哥大姐给小弟解释解释,感激不尽!
搞出来没? 这些天很忙所以没有上来看,你这问题是出现在scanf()函数的应用,scanf("%d\n", &(p->pbase));
\n是换行符,加入\n后,表示你输入一个整型数后还要输入一个,然后敲回车。去掉就可以解决问题了。
{:5_91:}
我还想问问你
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));
printf("第%d个数据是:%d ",i+1,p->pbase);
}
printf("\n");
}
//显示数组
void show(Arr *p)
{
printf("5个数据分别是:");
int i;
for(i=0; i<p->len; i++)
{
printf("%d ", p->pbase);
}
}
void main(void)
{
Arr a;
Init(&a);
show(&a);
}
bbchylml 发表于 2011-12-21 12:34 static/image/common/back.gif
这些天很忙所以没有上来看,你这问题是出现在scanf()函数的应用,
\n是换行符,加入\n后,表示你输入一个整 ...
len是数组内当前元素个数,cnt是数组长度! #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));
printf("第%d个数据是:%d ", i+1,p->pbase);
}
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);
}
return;
}
void main(void)
{
Arr a;
Init(&a);
show(&a);
return;
} 总的来说又两个错误,第一个就是int i,放在程序后面,定义变量时要注意一定要放在程序前,以防止有些的编译器会报错,还有就是楼上说的scanf("%d\n",&(p->pbase)),一般scanf不要用\n,因为这输入的时候容易出错,不知道我这样说你听得懂不
YJL 发表于 2011-12-22 22:20 static/image/common/back.gif
总的来说又两个错误,第一个就是int i,放在程序后面,定义变量时要注意一定要放在程序前,以防止有些的编译 ...
明白了,谢谢啊! 学会匈牙利命名法,又不加标注别人是看不懂得 紫炎 发表于 2011-12-25 16:11 static/image/common/back.gif
学会匈牙利命名法,又不加标注别人是看不懂得
恩,谢谢!
页:
[1]