是否可以使用sscanf
读取下面示例中的char字符串s
作为两个10-chars(包括空格)宽浮点数?或者我是否必须将10个字符的块复制到临时字符数组并在该临时数组上使用sscanf
?
#include <stdio.h>
int main( int argc, const char* argv[] )
{
char s[]={" 6.4887.0522e+06"};
float f1, f2;
sscanf(s, "%10f%10f", &f1, &f2);
printf("%10f %10f\n", f1, f2);
}
我希望在此示例中从f1 = 6.448
读取f2 = 7052200.
和sscanf
。
答案 0 :(得分:2)
如果s[]
不是const
,请暂时制作s[10] = 0
。
void foo(char *s) {
while (*s) {
size_t length = strlen(s);
char temp = 0;
if (length > 10) {
length = 10;
temp = s[10];
s[10] = 0;
}
float f1;
if (sscanf(s, "%f", &f1) == 1) printf("%f\n", f1);
s += length;
s[0] = temp;
}
}
答案 1 :(得分:1)
扫描设置可能有效。将有效字符放在括号中。 10将扫描限制为10个字符。 %n
说明符将报告扫描处理的字符数。这可以在sscanf中用来迭代一个长字符串。
char substr[11] = {'\0'};
char s[]={" 6.4887.0522e+06"};
int offset = 0;
int used = 0;
while ( ( sscanf ( s + offset, "%10[-+.eE 0-9]%n", substr, &used)) == 1) {
if ( used == 10) {
printf ( "%s\n", substr);
//convert as needed
offset += used;
}
else {
//do something to handle the problem
break;//one option...
}
}