Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C格式化i/o fscanf(新手)_C_Scanf - Fatal编程技术网

C格式化i/o fscanf(新手)

C格式化i/o fscanf(新手),c,scanf,C,Scanf,我有一个文件,其中包含一些数据、一些标题行和一些数据标签。 我想提取数据并将其分配给变量。 我正在跳过两个标题行(长度未知),包括: 数据上的标签读起来像 this datum =0.444 this other =6.666 实际数据总是从第12列开始。 我正在读这些连续的fscanf电话 float x1; float x2; char label[11]; fscanf (filename, " %11s %f ", label, x1); fscanf (filename, " %

我有一个文件,其中包含一些数据、一些标题行和一些数据标签。 我想提取数据并将其分配给变量。 我正在跳过两个标题行(长度未知),包括:

数据上的标签读起来像

this datum =0.444
this other =6.666
实际数据总是从第12列开始。 我正在读这些连续的fscanf电话

float  x1;
float  x2;
char label[11];
fscanf (filename, " %11s %f ", label, x1);
fscanf (filename, " %11s %f ", label, x2);
等等

这不管用。我所有的价值都是零

我还收到关于“%f”的编译警告,该警告要求参数的类型为“float*”,但参数4的类型为“double”

我知道如何在FORTRAN中实现这一点,但以前从未编写过C程序。
谢谢。

您必须将指向
x1
x2
的指针传递到
fscanf
。这使得
fscanf
可以更改它们的值

fscanf (filename, " %11s %f ", label, &x1);
fscanf (filename, " %11s %f ", label, &x2);
要捕获浮动,我有一个简单的解决方法:

char tmp[1000];
fscanf(filename, "%[^=]=%f", tmp, &x1);
我自己也不喜欢那种
tmp
的东西。它可以用更好的方式编写。

(除deepmax建议的更改外):

您使用的是说明符
%s
,它读取字符串直到第一个空格,即使您指定了长度(11)。您正在指定MAX length,但如果它读取一个空格(“this”后面的空格),它仍然会提前退出

我将使用以下格式:

fscanf (filename, " %*[^=]=%f ", &x1);

这意味着:“扫描并丢弃所有字符,直到找到
”='
字符。然后扫描该字符。然后扫描一个浮点并将其写入x1。

谢谢!这消除了编译错误,但数据没有正确读入(仍然为零)是的,
*
丢弃。比我的解决方案更好。+1这很有效。我现在也可以删除标签的任何引用。
fscanf (filename, " %*[^=]=%f ", &x1);