如何使用sscanf返回参数
我当时正在从一个文本文件中读取一行,该文件的格式为:2.34 4.68 5.98。我想将这些浮点值存储在一个数组中,以便以后可以使用每个参数,但一旦使用sscanf并尝试打印参数,我得到0。知道问题出在哪里吗。多谢各位如何使用sscanf返回参数,c,C,我当时正在从一个文本文件中读取一行,该文件的格式为: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]);// th
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
您可以一次扫描它们:
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]);
}
此时,您正在扫描一个位置(状态[12]
),并希望该值存储在其他位置(状态[0]
)
您还犯了一些错误:
- 存储到
数组中时,您应该存储到char*
数组中float
- 当它希望获取实际值时,使用带有
的指针printf
- 使用
结束语句。。。?不确定这是否是打字错误
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]);
}
此时,您正在扫描一个位置(状态[12]
),并希望该值存储在其他位置(状态[0]
)
您还犯了一些错误:
- 存储到
数组中时,您应该存储到char*
数组中float
- 当它希望获取实际值时,使用带有
的指针printf
- 使用
结束语句。。。?不确定这是否是打字错误
FILE *fp = fopen(fileName);
float tabNumbers[3] = {0};
if (fp) {
for (int i = 0; i < 3; ++i)
fscanf(fp, "%f", &tabNumbers[i]);
fclose(fp);
}
FILE*fp=fopen(文件名);
浮点数[3]={0};
if(fp){
对于(int i=0;i<3;++i)
fscanf(fp、%f、&tabNumbers[i]);
fclose(fp);
}
您正在表格的第12格中输入数字;真奇怪
直接使用fscanf不是更容易吗
FILE *fp = fopen(fileName);
float tabNumbers[3] = {0};
if (fp) {
for (int i = 0; i < 3; ++i)
fscanf(fp, "%f", &tabNumbers[i]);
fclose(fp);
}
FILE*fp=fopen(文件名);
浮点数[3]={0};
if(fp){
对于(int i=0;i<3;++i)
fscanf(fp、%f、&tabNumbers[i]);
fclose(fp);
}
嗯。你因为(至少对我来说)误解数组在c中的工作方式而获奖
[12]
数组的名称(无论是行
还是状态
)都可以自动转换为指向数组开头的字符*
。所以
sscanf(line,"%f", ...);
扫描行的内容
。然而,行[12]
是位于(*行)+12
位置的单个字符浮点数
来放入结果,或者需要将格式说明符从%f
更改为%s
。您不应该将%f
的结果转换为字符*
[12]
数组的名称(无论是行
还是状态
)都可以自动转换为指向数组开头的字符*
。所以
sscanf(line,"%f", ...);
扫描行的内容
。然而,行[12]
是位于(*行)+12
位置的单个字符浮点数
来放入结果,或者需要将格式说明符从%f
更改为%s
。您不应该将%f
的结果转换为字符*
您是否为所有
char*
s分配了内存?您似乎也对float
与char*
?char*State[2000]感到非常困惑代码>应为<代码>浮动状态[2000]代码>您需要一个循环来读取所有状态。顺便说一句,你似乎不知道数组是如何工作的,你应该读一本书。你的数据类型真的很混乱。。。您是否打算使用2000个指向字符串(字符数组)的指针?还是2000个指向浮动的指针?或者只有2000个浮点数?您是否为所有char*
s分配了内存?您似乎也对float
与char*
?char*State[2000]感到非常困惑代码>应为<代码>浮动状态[2000]代码>您需要一个循环来读取所有状态。顺便说一句,你似乎不知道数组是如何工作的,你应该读一本书。你的数据类型真的很混乱。。。您是否打算使用2000个指向字符串(字符数组)的指针?还是2000个指向浮动的指针?还是只有2000辆车?。。。更不用说scanf()
需要一个地址,而不是地址的地址(&state[12]
应该是state[12]
,如果state是float*state[2000]
(并且内存已经分配)。@Jamie:我认为假设他的float*
数组已经初始化了是有点乐观的:)非常感谢Mike kwan的解释性回复,您的评论非常有用。我非常欣赏你的优秀技能。@ USER99:如果你的问题有助于解决你的问题,请考虑接受一些问题。更不用说scanf()
需要一个地址,而不是地址的地址(&state[12]
应该是state[12]
,如果state是float*state[2000]
(并且内存已经分配)。@Jamie:我认为假设他的float*
数组已经初始化了是有点乐观的:)非常感谢Mike kwan的解释性回复,您的评论非常有用。我非常欣赏你的优秀技能。@ USER99:如果你的问题有助于解决你的问题,请考虑接受其中的一些问题:谢谢你的解释。我会考虑你的意见。干杯谢谢你的解释。我会考虑你的意见。干杯