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

2025-03-04 02:21:22
推荐回答(5个)
回答1:

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

//************************************
// 返回值: 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 {
puts(strArray[i]);
}
return 0;
}

C++ 不知道你有没有学过,要用C++实现的话有更好的方法,代码更加简洁。
用 ios 对象的 getline() 操作可以读取一行。
共同学习,共同提高。
我的邮箱:
xusiwei1236@163.com

回答2:

#include

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;
}

回答3:

通常这种不会要求你全部读完再处理,更多的情况是读取一行或者几行就能够处理,然后继续读取直到文件结束
写一个while(scanf("%s",array)!=EOF)就能够实现
当然你是从文件读入,应该换成相应的fscanf函数

------------------------
想要详细代码,你得先把需求说明白了~

回答4:

我用的是C++,不用array[]数组行不行?我觉得用一个模板会更好(因为不清楚文件有多少行多少列,用array[]数组可能会造成内存的浪费)。(现场编一编,并没有编译验证,有不对的地方请指出。)
#include
#include
#include
#include
using namespace std;
void main()
{
vector strings;
string line_string;
ifstream in("a.txt");
while (getline(in,line_string))
strings.push_back(line_string);//把每一行的内容放入容器中
for (int i=0;i cout<<"strings["<}

回答5:

关键部位伪代码:

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

多少给点分哦