【动态二维数组的使用问题】

bluestar2009 2012-04-15 04:08:27
#include "stdio.h"
#include "string.h"
#include <malloc.h>
#define LEN 100
main()
{
FILE *fp;
int i=0,j=0,k=0,num;
char line[15]={0};
//申请二维动态数组
int **arry=(int **)malloc(sizeof(int*)*LEN),*p[LEN];
for (i=0;i<LEN;i++)
{
arry[i] = (int*)malloc(sizeof(int)*LEN);
p[i]=arry[i];
//初始化
memset(arry[i],0,sizeof(arry[i]));
}
//从文件读入两个变量
fp=fopen("data.txt","r");
while(fscanf(fp,"%d %d\n",&i,&num)!=EOF)
{
*arry[i]++=num;
}
fclose(fp);
//输出
for (i=0;i<LEN;i++)
{
for (j=0;i<10;j++)
{
printf("%d ",*(p[i]+j));
}
printf("\n");
}
}


我读入的 是像 这样个数的数据

1 67
5 78
2 78
4 89
8 23
1 56

把这些输入 例如 度日 1 67 则 把 67 存入 arry[1][0] 里 当第二次读入 1开头的则依次往下存

入读到 1 56 则 56 存到67 的后面 如此这般

我的全是0 0 0 0 0 0 0 0 要么就 是 全存在了每组的首元素 下次存也是覆盖在首元素了··

其硅胶高手
...全文
95 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluestar2009 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 2 楼 的回复:

引用 1 楼 的回复:
while(fscanf(fp,"%d %d\n",&amp;amp;i,&amp;amp;num)!=EOF)
==>
while(fscanf(fp,"%*[^0-9]%d %d\n",&amp;amp;i,&amp;amp;num)!=EOF)

//%*[^0-9] 忽略之前的非数字值.

……
[/Quote]
输出全是 0

然后我试过把二维数组每行第一个输出

貌似是全被后面的覆盖了还是怎么的 帮忙看看 谢谢啦
小默 2012-04-16
  • 打赏
  • 举报
回复
 
//我感觉是这一段的操作符优先级影响的,改成这样试试?
while(fscanf(fp,"%d %d\n",&i,&num)!=EOF)
{
*(arry[i]++) = num;
}

//这里也不对
for (j=0;i<10;j++)
bluestar2009 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:
引用 3 楼 的回复:
引用 2 楼 的回复:

引用 1 楼 的回复:
while(fscanf(fp,"%d %d\n",&amp;amp;amp;amp;i,&amp;amp;amp;amp;num)!=EOF)
==>
while(fscanf(fp,"%*[^0-9]%d %d\n",&amp;amp;amp;amp;i,&a……
[/Quote]我这个p[i]是指针 不能 p[i][j]这样输出···
赵4老师 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
我发现除了memeset的头文件是在删掉一些内容时误删

最大的错误就是在输出时二层循环里的j<10手误成i<0了 改了就好了

结贴 谢谢大家
[/Quote]
关于自己是否适合编程的很简单的测试:
在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案:

A里面有10处以上文字或标点错误
B里面没有文字或标点错误并敢为此跟人打赌
C里面没有文字或标点错误并且字体和排版完全与原稿一致
D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感

A不适合编程(理由:打字准确度偏低、粗心大意)
B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念)
C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证)
D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!)

如果想从A变成B的话,到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
evencoming 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 3 楼 的回复:
引用 2 楼 的回复:

引用 1 楼 的回复:
while(fscanf(fp,"%d %d\n",&amp;amp;amp;i,&amp;amp;amp;num)!=EOF)
==>
while(fscanf(fp,"%*[^0-9]%d %d\n",&amp;amp;amp;i,&amp;amp;amp;num)!=EOF)……
[/Quote]
for (i=0;i<LEN;i++)
{
for (j=0;i<10;j++)
{
printf("%d ",*(p[i]+j));
}
printf("\n");
}

==>
for (i=0;i<LEN;i++)
{
for (j=0;j<10;j++)
{
printf("%d ",p[i][j]);
}
printf("\n");
}
//注意内循环的 不变量.应该是j,你写成了i
bluestar2009 2012-04-16
  • 打赏
  • 举报
回复
我发现除了memeset的头文件是在删掉一些内容时误删

最大的错误就是在输出时二层循环里的j<10手误成i<0了 改了就好了

结贴 谢谢大家
赵4老师 2012-04-16
  • 打赏
  • 举报
回复
//在堆中开辟一个4×5的二维int数组
#include <stdio.h>
#include <malloc.h>
int **p;
int i,j;
void main() {
p=(int **)malloc(4*sizeof(int *));
if (NULL==p) return;
for (i=0;i<4;i++) {
p[i]=(int *)malloc(5*sizeof(int));
if (NULL==p[i]) return;
}
for (i=0;i<4;i++) {
for (j=0;j<5;j++) {
p[i][j]=i*5+j;
}
}
for (i=0;i<4;i++) {
for (j=0;j<5;j++) {
printf(" %2d",p[i][j]);
}
printf("\n");
}
for (i=0;i<4;i++) {
free(p[i]);
}
free(p);
}
// 0 1 2 3 4
// 5 6 7 8 9
// 10 11 12 13 14
// 15 16 17 18 19
evencoming 2012-04-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:
while(fscanf(fp,"%d %d\n",&amp;i,&amp;num)!=EOF)
==>
while(fscanf(fp,"%*[^0-9]%d %d\n",&amp;i,&amp;num)!=EOF)

//%*[^0-9] 忽略之前的非数字值.

这个i 和num的值可以正常取出来了

不知道该怎么存……
[/Quote]
你那个代码不行吗?
我感觉很巧妙啊.目测没错
bluestar2009 2012-04-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
while(fscanf(fp,"%d %d\n",&i,&num)!=EOF)
==>
while(fscanf(fp,"%*[^0-9]%d %d\n",&i,&num)!=EOF)

//%*[^0-9] 忽略之前的非数字值.
[/Quote]
这个i 和num的值可以正常取出来了

不知道该怎么存到动态二维数组里

求助谢谢楼上
evencoming 2012-04-15
  • 打赏
  • 举报
回复
while(fscanf(fp,"%d %d\n",&i,&num)!=EOF)
==>
while(fscanf(fp,"%*[^0-9]%d %d\n",&i,&num)!=EOF)

//%*[^0-9] 忽略之前的非数字值.

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧