例如本人有个.txt文件内容如下:
23 54 70 4 5 6 7 8 9
一行总共有9个数据,中间空格隔开。
现在声明一个变量打开这个文件。
ifstream readfile;
然后读取这一行存到 line 中
getline(readfile,line);
istringstream stream(line);
本人想用stream>>tt
tt跳过第一个整数,赋予第二个整数,怎么写呢
求帮助高手。
23 54 70 4 5 6 7 8 9
一行总共有9个数据,中间空格隔开。
现在声明一个变量打开这个文件。
ifstream readfile;
然后读取这一行存到 line 中
getline(readfile,line);
istringstream stream(line);
本人想用stream>>tt
tt跳过第一个整数,赋予第二个整数,怎么写呢
求帮助高手。
解决方案
5
乍看起来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。
仅供参考:
但是不用格式控制符,输入输出恰好是你期望的格式的时候好说;等到输入输出不是你期望的格式的时候,你就会觉得还是用格式控制符更方便、更靠谱。
摒弃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
20
很多数据是指有很多行?
每行都跳过第一个数也不麻烦啊
10
封装一个函数,参数是要跳过的个数,然后循环读几次搞定