请教各位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第二维大小大于文件总行数。

多少给点分哦

分别用C语言和C++读取txt文件到一个二维数组
打开文件,然后读入一行到字符串str里面,循环读取行即可;参考例子如下:include <stdio.h> include <stdlib.h> \/ 1.txt 1,2,3,4,5,6,7 8,9,10,11,12,13,14 15,16,17,18,19,20,21 \/ int main (){ FILE *fp;int **a;\/\/定义二维数组 int i,j;int row=0,column=0;\/\/...

c语言如何从文件中读入矩阵,存入二维数组?
using namespace std;int mat[101][101];int main(){ int n,m;\/\/行,列...int i,j;freopen("D:\\\\in.txt","r",stdin);\/\/读文件...cin>>n>>m;\/\/读入矩阵行数,列数...for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>mat[i][j];return 0;} ...

C语言把一些字符串存入一个二维数组(在线等)
\/\/1. 如是c的话不要引用#include<iostream>,如果c++的话不要引用#include<stdio.h> \/\/2. 因为是强制读100个,并且只能读100个。如果文件中总数小于100,则可以正常打印出来;如果大于100,则只能输出100个;猜测你的文件中第一行应该是多于100个字符的;\/\/3. 学会单步跟踪加细心 \/\/4. 多用VC...

如何用C语言读取txt文件中的数据到程序的数组中?
int a[50][2];int i;fin = fopen("abc.txt","r"); \/\/ 打开文件,按读的方式打开 for (i=0;i<50;i++)fscanf(fin,"%d %d", &a[i][0], &a[i][1]); \/\/ 循环读 fclose(fin); \/\/关闭文件 for (i=0;i<50;i++) printf("%d %d\\n",a[i][0],a[i][1]); ...

c++ 中如何读取文件 并使用文件中的数据
1、在电脑上新建一个文件夹,名称叫txt2array。然后,打开我们的devc++,新建一个控制台c++项目,名称也叫txt2array。2、将项目文件及源代码文件以及我们演示用的数据文件都存放在txt2array文件夹中。3、向数据文件中写入一些演示用数据。4、标准库的输入输出类的关系。5、第一个操作读文件,我们可以...

C++中怎样从文件中读取一个float型的数据
{ ifstream i("1.txt");int a;double b,c;i>>a>>b>>c;cout<<a<<b<<c;return 0;} 上程序假设1.txt文件的内容为 1 500.55 600.55 2 500.56 600.76 3 501.12 700.49 因为标准输入流会忽略空格和换行,然后用空格和换行分割字符 这是读出一行的,那读出N行...

C++中如何把一个txt文件的内容输入到一个char a[]里
include<fstream> include<iostream> using namespace std;int main(){ ifstream infile("a.txt",ios::in);if(!infile){ cerr<<"read error"<<endl;exit(0);} char a[1000];while(infile)infile.getline(a,1000,'\\n');return 0;} ...

如何使用C语言在动态数组中手动输入一个二维数组的值
c++强答一波 include <iostream> using namespace std;int main(){ cout << "请输入你需要的矩阵a的行数和列数" << endl;int s, t;\/\/s为数组行数的递推 int i, j;\/\/i为二维数组的行数,j为二位数组的列数 cin >> i >> j;int a[100][100];int b[100][100];cout << "请...

请问如何用C++将一个TXT文件中的汉字读取,然后显示出来
include <string> using namespace std;void main(){ string str1;ifstream infile("c:\\\\1.txt",ios::in);if(!infile)cout<<"文件打开错误"<<endl;else infile>>str1;cout<<"读入的字符为: "<<str1<<endl;} 记住:ifstream infile("c:\\\\1.txt",ios::in);中的“c:\\\\1.txt"就...

急急!!!如何用c语言输入和输出一个二维数组??
include <stdio.h> include <stdlib.h> int main(){ int a[2][2];int i,j;for (i=0;i<2;i++){ for (j=0;j<2;j++){ scanf("%d ",&a[i][j]);} } for(i=0;i<2;i++)for(j=0;j<2;j++)printf("%d",a[i][j]);return 0;} 运行成功 ...

相似回答