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

来源:百度文库 编辑:神马文学网 时间:2024/04/27 07:05:33
主  题:C语言中如何读入未知二维数组的行数和列数?
作  者:hawkjxr (子陵仲)
等  级:
信 誉 值:100
所属论坛:C/C++ C语言
问题点数:20
回复次数:12
发表时间:2005-08-07 20:56:15
文件中内容大致如下:
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
请问,如何写一个读入程序。
前提条件是数组的行数和列数都是未知的,问题的关键在于如何知道什么时候换行.
使得所有数据可以进入一个二维数组?
回复人:xiaocai0001(萧筱雨) () 信誉:1002005-08-07 21:04:00得分:0
没这么夸张吧,不过可以当作字符串来处理,先以字符串读入,到程序中再进行识别,得到所需要的行列值
Top
回复人:hawkjxr(子陵仲) () 信誉:1002005-08-07 21:11:00得分:0
那这样的话,由于不知道数据的多少,要是数字一共有1000个一行怎么办呢?
Top
回复人:xiaocai0001(萧筱雨) () 信誉:1002005-08-07 21:14:00得分:0
那你缓冲区设置大一些就可以了
因为是动态的,所以肯定使用不方便了。
你也可以考虑用动态链表来处理。
但你要是直接以数字方式读入数据的话,识别回车这个问题我还没想到能不能有办法。
Top
回复人:doway(john) () 信誉:1002005-08-07 21:17:00得分:0
那是不可能地。
使用数组必须知道大小。数组通常都是你自己创建的,因此你可以知道大小。从其他地方过来的数组,别人会同时给你个参数,告诉你数组大小。你给别个时也一样。
void f(int ia[],int)
这里的 int ia[] 实际上是个指针,其实应该象下边这样定义:
void f(int *, int)
Top
回复人:xiaocai0001(萧筱雨) () 信誉:1002005-08-07 21:27:00得分:0
呵呵怎么不可能呢?
静态数组当然是必须知道大小的,但动态数组呢?
int *array;
int p;
cout<<"Please input the array size";
cin>>p;
if (p>0)
{
array = new int[p];
}
你说上面这段代码能不能产生一个动态数组呢?
Top
回复人:hawkjxr(子陵仲) () 信誉:1002005-08-07 21:33:00得分:0
我问的程序只是一个工程的一部分,必须把矩阵列入二维数组
而程序里面所有的数据都是由外界输入,
现在要计算一个数组,你说我怎么知道这个数组的大小呢?文件里面不会直接给出
好象以前Pascal都可以识别出文件里面的行结束符号,为什么
C只有文件结束符号可以识别呢?
Top
回复人:xiaocai0001(萧筱雨) () 信誉:1002005-08-07 21:40:00得分:0
这些数值保存在文件里就好办了啊
你可以用getline()这个函数就可以一行一行的读取数据了,不过读出来的还是字符串形式的,
读完了你还得加工识别。
Top
回复人:zenny_chen(ACE Intercessor) () 信誉:1002005-08-07 21:49:00得分:0
首先定两个计数器,一个用来计数行数,一个用来计数列数。
使用数组动态分配。如果文本中为小于255的ASCII码,则可以用unsigned char类型数组保存。
#include
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);
}
_xyz