我想从一行文件中读取浮点数(以及之后的整数)。当我调试它时,我可以看到它从文件中删除线条没有问题,但是当我尝试sscanf它时,我会得到垃圾。这是我的代码:
while(fgets(line, 1000, file) != EOF)
{
//Get the first character of the line
c = line[0];
if(c == 'v')
{
sscanf(line, "%f", &v1);
printf("%f", v1);
}
}
v1中存储的值是垃圾。为什么这不起作用,我如何从这一行中获得浮动和整数?
答案 0 :(得分:5)
你在sscanf的调用中包含第一个字符(即'v'),因此调用失败并且v1
保持不变(其中包含垃圾)。试试这个:
sscanf(line+1, "%f", &v1);
答案 1 :(得分:2)
据推测v1是漂浮物?
在这种情况下,在内存中打印一个浮动就像是一个'c'字符串一样会很糟糕。
您可能想尝试printf("%f",v1);
if(c == 'v')
{
sscanf(line, "%f", &v1);
如果行以'v'开头,那么你是将它发送给scanf并要求它将其转换为浮点数?你可能想要移动一个字符(或者如果你有其他填充,则更多),然后开始在第[1]行读取浮点数?
答案 2 :(得分:1)
您的printf语句应如下所示:
printf("%f\n", v1);
另外,你应该检查sscanf的返回值,检查它是否找到并存储浮点数:
if(sscanf(line, "%f", &v1) < 1){
/* didn't read float */
}else{
printf("%f\n", v1);
}
答案 3 :(得分:1)
由于您知道在执行sscanf()
调用时line
中的第一个字符是字母'v',您还可以告诉sscanf()
无法成功将其转换为double
或float
,因为'v'不是以字符串形式显示的任何有效浮点数的一部分。
您应该检查sscanf()
的返回值;它会说0(没有成功的转换),从而告诉你出了问题。
你可能会成功:
if (sscanf(line+1, "%f", &v1) != 1)
...error...