请教各位C语言高手,C++ 用txt文件中的数据读入一个二维数组

比如我现在有一个文件a.txt,数组array[]
abcdefg
hijklmn
opqrstv
......
.....
.....

文件有多少行多少列都不知道,要求把文件的第一行读入二维数组的第一行array[0],文件的第二行读入二维数组的第二行array[1],以此类推
要求详细代码,多谢

这个用一维指针数组表示,要比二维数组好。好就好在,这样每行可以存任意数目的字符。而二维数组就不行,比如char strary[5][10];用它只能每行存9个字符('\0'结尾)。一下是c语言的代码,关键句是 fscanf(fptr,"%s",tmpStr); // 它实现了读取一行
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//************************************
// 返回值: int // 行数
// 功能: 按行读取filename文件,分别存入strAry
//************************************
int inputfunc(char* filename,char* strAry[])
{
int lineNum=0; // 行数
const int LineBuf=128; // 缓存大小,128,可改
char tmpStr[LineBuf]; // 临时字符串

FILE* fptr=fopen(filename,"r");
if (!fptr) // 打开失败
{
printf("文件打开失败!\n");
return 0;
}

for (int i=0; ; i++)
{
if (feof(fptr)) break;
fscanf(fptr,"%s",tmpStr);
strAry[i]=(char*)malloc((strlen(tmpStr)+1)*sizeof(char));
strcpy(strAry[i],tmpStr);
lineNum++;
}
fclose(fptr);
return lineNum;
}

int main()
{
char file[64]; // 存文件名
char* strArray[10]; // 存字符串
printf("请输入完整文件名(包括文件路径):");
scanf("%s",file);
printf(file);

for (int i=0; i<inputfunc(file,strArray); ++i)
{
puts(strArray[i]);
}
return 0;
}

C++ 不知道你有没有学过,要用C++实现的话有更好的方法,代码更加简洁。
用 ios 对象的 getline() 操作可以读取一行。
共同学习,共同提高。
我的邮箱:
xusiwei1236@163.com
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-06-05
#include <stdio.h>

int main()
{
// 文件不能超过128行。如果文件上万行,就不可以用数组一次性保存。
char array[128][512];
FILE *fp;
int i = 0;

if ((fp = fopen("a.txt", "r")) == NULL)
{
printf("文件a.txt不存在\n");
return -1;
}

while (fscanf(fp, "%s", array[i]) != EOF)
puts(array[i++]);

fclose(fp);
return 0;
}本回答被提问者采纳
第2个回答  2011-10-28
通常这种不会要求你全部读完再处理,更多的情况是读取一行或者几行就能够处理,然后继续读取直到文件结束
写一个while(scanf("%s",array)!=EOF)就能够实现
当然你是从文件读入,应该换成相应的fscanf函数

------------------------
想要详细代码,你得先把需求说明白了~
第3个回答  2011-10-30
我用的是C++,不用array[]数组行不行?我觉得用一个模板会更好(因为不清楚文件有多少行多少列,用array[]数组可能会造成内存的浪费)。(现场编一编,并没有编译验证,有不对的地方请指出。)
#include <fstream>
#include <vector>
#include <iostream>
#include <string>
using namespace std;
void main()
{
vector<string> strings;
string line_string;
ifstream in("a.txt");
while (getline(in,line_string))
strings.push_back(line_string);//把每一行的内容放入容器中
for (int i=0;i<stings.size();i++)
cout<<"strings["<<i<<"]="<<strings[i]<<endl;
}
第4个回答  2011-10-28
关键部位伪代码:

while(文件未结束)
{
读一行,
将该行内容放入array[i];
i++;
}
需要注意的地方有:
array[]没一维长度要定义大一点,要保证可以容纳每行的内容。
array 第二维大小,即i不要越界,要保证array第二维大小大于文件总行数。

多少给点分哦
相似回答