user-0 提问: 求C/c++如何编写读取txt文件中数组的程序编写

回复:
user: user-1
content: 乍看起来c++的cin、cout、ifstream、ofstream、istringstream、ostringstream在输入、输出上比c的scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf简单，不用格式控制符！ 但是不用格式控制符，输入输出恰好是你期望的格式的时候好说；等到输入输出不是你期望的格式的时候，你就会觉得还是用格式控制符更方便、更靠谱。 摒弃cin、cout、ifstream、ofstream、istringstream、ostringstream！ 使用scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf。  仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %32[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8    再供参考：#include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.

user: user-2
content: 试了下楼主的代码发现第一行的数据是能读进来的啊 感觉楼主你这样n<point-1的话，如果文件里面最后没有空行的话，会少读一行

user: user-0
content: 我写的这个程序为啥写到另一个txt里面的时候不是从第一个开始写的，第一个数跑哪去了#include <stdio.h> #include <stdlib.h> #include <iostream> #include <fstream> #include <math.h>  using namespace std;  void main() { 	FILE *fp;  	char buf[1024]; 	int i=0;				// 首先计算数据有多少行 	if((fp=fopen("1004.txt","r"))==NULL) 	{ //打开txt文件 		perror("File open error!\n"); 		return; 	}  	while(!feof(fp)) 	{ 		fgets(buf, 1000, fp); 		i++; 	}  	cout << i-1 << endl;  	int point = i; 	float *value = new float[i]; //如何 定义动态数组 	float *depth = new float[i]; 	fseek(fp,0,SEEK_SET); // 把指针移到起始位置  //	float stdep;  //	fscanf(fp,"%f",&stdep); //	cout << stdep <<endl;  	for (int k=0; k<point-1; k++) 	{ 	fscanf(fp,"%f %f",&depth[k],&value[k]); 	cout << value[k]<<' '<<depth[k] <<endl; 	}  	fclose(fp);  //关闭指针  	  	const char * pFileName="1005.txt";/*定义想输出的文件名*/ 	FILE * pFile;/*定义文件指针*/ 	pFile=fopen(pFileName,"wt"); /*以文本方式打开文件用于输出*/ 	if ( NULL == pFile ) 	{ 		perror("打开文件失败"); 		return; 	} 	for (int n=0; n<point-1; n++) 	{ 	fprintf(pFile,"%f %f\n",value[n],depth[n]); 	} 	if ( ferror(pFile) ) 	{ 		perror("写文件失败"); 		/*关闭文件后返回*/ 		fclose(pFile); 		return; 	}  	printf("文本文件成功写入\n"); 	/*不要忘记关闭文件*/ 	fclose(pFile); 	return; }

user: user-0
content: 我是想要能读取数据，还有使用动态数组

user: user-3
content: 不就是拷贝个文件嘛  #include <stdio.h> int main() {     int ch;      freopen("1.txt", "r", stdin);     freopen("2.txt", "w", stdout);     while (EOF != (ch = getchar()))         putchar(ch);     return 0; }

user: user-2
content: ifstream读，ofstream写

user: user-0
content: 怎么把txt中的数读到另一个txt里面啊？？？？

user: user-0
content: #include <stdio.h> #include <stdlib.h> #include <iostream> #include <math.h> #include <fstream>  using namespace std;  void main() { 	FILE *fp;  	//float data[6000][2]={0};   // 必须用动态数组定义 	char buf[1024]; 	int i=0;				// 首先计算数据有多少行 	if((fp=fopen("1004.txt","r"))==NULL) 	{ //打开txt文件 		perror("File open error!\n"); 		return; 	}  	while(!feof(fp)) 	{ 		fgets(buf, 1000, fp); 		i++; 	}  	cout << i-1 << endl;  	int point = i; 	float *value = new float[i]; //如何 定义动态数组 	float *depth = new float[i]; 	fseek(fp,0,SEEK_SET); // 把指针移到起始位置  	float stdep;  	fscanf(fp,"%f",&stdep); 	cout << stdep <<endl;  	for (int k=0; k<point-1; k++) 	{ 	fscanf(fp,"%f %f",&depth[k],&value[k]); 	cout << value[k]<<' '<<depth[k] <<endl; 	}  	fclose(fp);  //关闭指针  }

user: user-0
content: 是的。我写了一个能读出来的程序，但是还没写出来怎么把txt中的数读到另一个txt里面 #include <stdio.h> #include <stdlib.h> #include <iostream> #include <math.h> #include <fstream>  using namespace std;  void main() { 	FILE *fp;  	//float data[6000][2]={0};   // 必须用动态数组定义 	char buf[1024]; 	int i=0;				// 首先计算数据有多少行 	if((fp=fopen("1004.txt","r"))==NULL) 	{ //打开txt文件 		perror("File open error!\n"); 		return; 	}  	while(!feof(fp)) 	{ 		fgets(buf, 1000, fp); 		i++; 	}  	cout << i-1 << endl;  	int point = i; 	float *value = new float[i]; //如何 定义动态数组 	float *depth = new float[i]; 	fseek(fp,0,SEEK_SET); // 把指针移到起始位置  	float stdep;  	fscanf(fp,"%f",&stdep); 	cout << stdep <<endl;  	for (int k=0; k<point-1; k++) 	{ 	fscanf(fp,"%f %f",&depth[k],&value[k]); 	cout << value[k]<<' '<<depth[k] <<endl; 	}  	fclose(fp);  //关闭指针  }

user: user-2
content: 一个两列不知道多少行的数组读出来，然后要怎么写入另一个文件呢？一样写成两列N行？

user: user-0
content: 是要读取txt文件中的n列2行的数组，写到另外的一个txt文件中

user: user-4
content: #include <fstream> #include <iterator> #include <string> #include <algorithm>  using namespace std;  int main() { 	ifstream fin("1.dat"); 	ofstream fout("2.dat"); 	ostream_iterator<string> out(fout, "\n"); 	string str; 	 	while (getline(fin, str)) 	{ 		*out = str; 	} 	fin.close(); 	fout.close(); 	 	return 0; }