关于sscanf的问题

来源:百度知道 编辑:UC知道 时间:2024/06/30 05:42:27
读入一个由TAB和回车键分隔开的数据文件,用C++操作,再文件顺利读入后,怎样用sscanf把这个数据提取出来呢?
for(i=0;i<lines;i++)
{
sscanf(s[i],"%d",&datas[num++]);
for(j=1;j<40;j++)
if(s[i][j]=='\t')
sscanf(s[i]+j+1,"%",&datas[num++]);
}
这样的话数据都变成无穷小的数,程序错在哪?
char *s[300];
str=new char[255];
double *datas;
datas=new double[2000];
int num=0,i=0,lines,j;
for(i=0;i<300;i++)
s[i]=new char [40];
i=0;
while(inf.getline(str,255))
{
strcpy(s[i++],str);
}
s[i]是第i行字符串的地址,调用cout<<s[i]可正确输出。
还有原题中"%d"应为"%fl".
我想知道的是,如何用sscanf将含tab的字符串中的数据读出来。

请检查你的s[i]是什么内容,还有第二个sscanf少了一个d,是%d!
================
"%fl" 你写反了,是lf( long float)
sscanf(...,"%lf\t",d);可以读

具体你看下面的msdn吧

Read formatted data from a string. These functions are deprecated because more secure versions are available; see sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l.

int sscanf(
const char *buffer,
const char *format [,
argument ] ...
);
int _sscanf_l(
const char *buffer,
const char *format,
locale_t locale [,
argument ] ...
);
int swscanf(
const wchar_t *buffer,
const wchar_t *format [,
argument ] ...
);
int _swscanf_l(
const wchar_t *buffer,
const wchar_t *format,
locale_t locale [,
argument ] ...
);

Parameters
buffer
Stored data

format
Format-control string. For more information, see Format Specifi