[英]Reading a file containing multiple lines of strings, integers and floats
我正在尝试读取一个包含包含字符串,整数和浮点数的行的文件。 数据之间用逗号分隔,并且我已经看到了大量有关如何最好地解决此问题的信息。 我先尝试读入一行,然后再实现多行,从而简化了问题。
我已经设法读取了前两个数据。 浮动给了我很多问题。
这是我尝试阅读的示例:
CHANNEL_1,0,0.453
char CHANNEL_NAME_[BUF_SIZE];
uint32_t val1_;
double val2_;
FILE *fp;
int c;
fp = fopen("E:\\read_from_file\\config.cfg", "r");
if (fp < 1)
{
printf("Failed to open file = %d\n", fp);
fclose(fp);
}
c = fscanf(fp, "%[^,], %u[^,], %lf", CHANNEL_NAME_, &val1_, &val2_);
printf("[%s] [%u] [%lf]\n", CHANNEL_NAME_, val1_, val2_);
printf("C = %d\n", c);
我能够正确打印字符串和整数,但是,浮点数给我带来了问题。 它以随机浮动的形式出现,例如34534524524523452345.0000000。 我希望看到上述浮动为0.453。
当我打印C时(这是fscanf的结果),由于读取了3种数据类型,我得到2个错误,因为我希望读取3个。
我究竟做错了什么?
没有诸如"%u[^,]"
之类的说明符。 该格式被视为单独的"%u"
然后是单独的"[^,]"
。
%[
格式仅读取字符串,它没有任何类型前缀(并且不需要,因为scanf
将停止在输入的第一个非数字字符处读取整数)。 这意味着您只能将"%u"
用作中间说明符:
c = fscanf(fp, " %[^,], %u, %lf", CHANNEL_NAME_, &val1_, &val2_);
请注意,我在格式字符串中添加了一个前导空格。 这是因为"%["
格式不会跳过前导空格(就像上一行之后的所有可能的换行一样)。
使用格式说明符"%u[^,]"
,该函数实际上尝试匹配输入中的精确序列"[^,]"
,但找不到该序列,从而导致无法读取最后一个值。 因此, c
的值为2
(因为fscanf
仅匹配两个值,即初始字符串和第一个无符号整数)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.