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

比如我现在有一个文件a.txt,数组array[]abcdefghijklmnopqrstv................文件有多少行多少列都不知道,要求把文件的第一行... 比如我现在有一个文件a.txt,数组array[]
abcdefg
hijklmn
opqrstv
......
.....
.....

文件有多少行多少列都不知道,要求把文件的第一行读入二维数组的第一行array[0],文件的第二行读入二维数组的第二行array[1],以此类推
要求详细代码,多谢
展开
 我来答
百度网友8aedf19
2011-10-31 · TA获得超过606个赞
知道小有建树答主
回答量:231
采纳率:100%
帮助的人:112万
展开全部
这个用一维指针数组表示,要比二维数组好。好就好在,这样每行可以存任意数目的字符。而二维数组就不行,比如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
furious_tauren
推荐于2016-06-05 · TA获得超过4055个赞
知道大有可为答主
回答量:1913
采纳率:100%
帮助的人:765万
展开全部
#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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
九霄晨曦
2011-10-28 · TA获得超过109个赞
知道小有建树答主
回答量:233
采纳率:0%
帮助的人:187万
展开全部
通常这种不会要求你全部读完再处理,更多的情况是读取一行或者几行就能够处理,然后继续读取直到文件结束
写一个while(scanf("%s",array)!=EOF)就能够实现
当然你是从文件读入,应该换成相应的fscanf函数

------------------------
想要详细代码,你得先把需求说明白了~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
朱珈蓝贺拨01g
2011-10-30 · 超过29用户采纳过TA的回答
知道答主
回答量:88
采纳率:0%
帮助的人:44.8万
展开全部
我用的是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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fenghuaster
2011-10-28 · TA获得超过426个赞
知道小有建树答主
回答量:266
采纳率:0%
帮助的人:255万
展开全部
关键部位伪代码:

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

多少给点分哦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式