我正在从具有以下格式的文本文件中读取一行:2.34 4.68 5.98。我想将这些浮点值存储在一个数组中,以便我可以在以后使用每个参数但是一旦我使用sscanf并尝试打印我得到的参数0.任何想法是什么问题。谢谢。
char* line[2000];
char* State[2000];
sscanf(line[12],"%f", &State[12]).
printf("\n state 1: %2.3f", &State[0]);// this suppose to print 2.34 but it prints 0
答案 0 :(得分:2)
您可以一次扫描所有内容:
float state[3];
if(sscanf(line[12], "%f %f %f", &state[0],
&state[1], &state[2]) != 3) {
...
} else
printf("\n state1: %f, state2: %f, state3:%f",
state[0], state[1], state[2]);
}
目前您正在扫描到一个地方(State[12]
)并希望将该值存储在其他地方(State[0]
)。
你犯的更多错误:
char *
数组中时存储到float
数组printf
的指针.
结束声明......?不确定这是否是拼写错误答案 1 :(得分:1)
sscanf(line[12],"%f", &State[12]).
行。你因为有一种新的(至少对我来说)误解数组如何在c中工作的方式而获奖。
在这两种情况下,你几乎肯定不希望[12]
。
数组的名称(line
或State
)可以自动转换为指向数组开头的char*
。所以
sscanf(line,"%f", ...);
扫描line
的内容。 line[12]
(*line)+12
位置float
是单个字符。
您需要%f
将结果放入或,您需要将格式说明符从%s
更改为%f
。您应该永远不会将char*
的结果变成{{1}}。
答案 2 :(得分:0)
你把数字放在桌子的第12个案例中;这很奇怪。
直接使用scanf是不是更容易?
FILE *fp = fopen(fileName);
float tabNumbers[3] = {0};
if (fp) {
for (int i = 0; i < 3; ++i)
fscanf(fp, "%f", &tabNumbers[i]);
fclose(fp);
}