C语言中如何读入未知二维数组的行数和列数?

hawkjxr 2005-08-07 08:56:16
文件中内容大致如下:
57 71 87 97 99 101 103 113 114 115 128 129 131 137 147 156 163 186
57 71 87 97 99 101 103 113 114 115 128 129 131 137 147 156 163 186
请问,如何写一个读入程序。
前提条件是数组的行数和列数都是未知的,问题的关键在于如何知道什么时候换行.
使得所有数据可以进入一个二维数组?
...全文
3178 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
hawkjxr 2005-08-12
  • 打赏
  • 举报
回复
那一行是字符啊,我读入的是一系列的数据
doway 2005-08-11
  • 打赏
  • 举报
回复
//a.txt
57 71 87 97 99 101 103 113 114 115 128 129 131 137 147 156 163 186
57 71 87 97 99 101 103 113 114 115 128 129 131 137 147 156 163 186

//fg.c
#include <stdio.h>

main()
{
int MAX = 100;
FILE *fp;
char line[100];

fp = fopen("a.txt", "r");
while (fgets(line, MAX, fp) != NULL)
printf("%s", line);
fclose(fp);
}

fgets 是标准库中的函数,每次读入一行。下边还会有问题吗?

hawkjxr 2005-08-11
  • 打赏
  • 举报
回复
getline又怎么用?
而且c的库函数里面有 getline函数吗》?
doway 2005-08-09
  • 打赏
  • 举报
回复
如果是流,就按流处理。

如果是硬盘上的文件,还可以使用内存映射文件处理。

换行不就是\r\n吗?怎么说“C只有文件结束符号可以识别呢?”?

jixingzhong 2005-08-09
  • 打赏
  • 举报
回复
我还是同意 QunKangLi(To iterate is human,to recurse divine):在文件第一行写入数组大小!!
hawkjxr 2005-08-09
  • 打赏
  • 举报
回复
但是读字符怎么能把\r\n读出来呢?
fire314159 2005-08-08
  • 打赏
  • 举报
回复
不过回车的识别还真的有点麻烦,难道要用字符输入,每输入一个,辨别是否回车后再来转成数字?晕菜哦。慢死了。
fire314159 2005-08-08
  • 打赏
  • 举报
回复
getline也不是能无限读入的,这里应该假设数组个数非常大,远远超过目前库函数能读入的最大数目。现在只能想到使用指针,做动态链表。输完后知道总数了,再切分。
fire314159 2005-08-08
  • 打赏
  • 举报
回复
楼上,现在是别人规定死了外部接口规则,我们去适应哦
QunKangLi 2005-08-08
  • 打赏
  • 举报
回复
最简单的方法:
在文件第一行写入数组大小:
3 4
00 01 02 03
10 11 12 13
20 21 22 23
zenny_chen 2005-08-07
  • 打赏
  • 举报
回复
首先定两个计数器,一个用来计数行数,一个用来计数列数。

使用数组动态分配。如果文本中为小于255的ASCII码,则可以用unsigned char类型数组保存。

#include <stdlib.h>

unsigned char **store;

void InitStore()
{
store = (unsigned char**)malloc(sizeof(*store));
}

这样可以自己定一个列长,比如说10。
那么可以一直都文本,直到计数大于10。
store[i] = (unsigned char*)malloc(sizeof(**store) * 10);

for(int j=0; j<10; j++)
{
store[i][j] = get_a_char(file);
}
xiaocai0001 2005-08-07
  • 打赏
  • 举报
回复
这些数值保存在文件里就好办了啊
你可以用getline()这个函数就可以一行一行的读取数据了,不过读出来的还是字符串形式的,
读完了你还得加工识别。
hawkjxr 2005-08-07
  • 打赏
  • 举报
回复
我问的程序只是一个工程的一部分,必须把矩阵列入二维数组
而程序里面所有的数据都是由外界输入,

现在要计算一个数组,你说我怎么知道这个数组的大小呢?文件里面不会直接给出

好象以前Pascal都可以识别出文件里面的行结束符号,为什么
C只有文件结束符号可以识别呢?
xiaocai0001 2005-08-07
  • 打赏
  • 举报
回复
呵呵怎么不可能呢?
静态数组当然是必须知道大小的,但动态数组呢?

int *array;
int p;
cout<<"Please input the array size";
cin>>p;
if (p>0)
{
array = new int[p];
}

你说上面这段代码能不能产生一个动态数组呢?
doway 2005-08-07
  • 打赏
  • 举报
回复
那是不可能地。

使用数组必须知道大小。数组通常都是你自己创建的,因此你可以知道大小。从其他地方过来的数组,别人会同时给你个参数,告诉你数组大小。你给别个时也一样。

void f(int ia[],int)

这里的 int ia[] 实际上是个指针,其实应该象下边这样定义:

void f(int *, int)

xiaocai0001 2005-08-07
  • 打赏
  • 举报
回复
那你缓冲区设置大一些就可以了
因为是动态的,所以肯定使用不方便了。
你也可以考虑用动态链表来处理。
但你要是直接以数字方式读入数据的话,识别回车这个问题我还没想到能不能有办法。
hawkjxr 2005-08-07
  • 打赏
  • 举报
回复
那这样的话,由于不知道数据的多少,要是数字一共有1000个一行怎么办呢?
xiaocai0001 2005-08-07
  • 打赏
  • 举报
回复
没这么夸张吧,不过可以当作字符串来处理,先以字符串读入,到程序中再进行识别,得到所需要的行列值

69,371

社区成员

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

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