这应该标记字符串str:
中的空格分隔字段float values[2*linesnum(str, length)];
char * pch;
pch = strtok(str, " ");
while (pch != NULL) {
printf("%s\n", pch);
pch = strtok(NULL, " ");
}
linesnum()只计算字符串中'\ n'个字符的数量。上面的代码正确地打印了我期望的str中的所有值。
但是,这只打印第一个值,然后打印每秒的值:
int k = 0;
float values[2*linesnum(data, length)];
char * pch;
pch = strtok(data, " ");
while (pch != NULL) {
values[k] = atof(pch);
//printf("%s\n", pch);
printf("%f\n", values[k]);
pch = strtok(NULL, " ");
k++;
}
以下是输入字符串的示例:
3.31 2.16
4.28 0.56
7.20 3.09
11.18 5.06
在第一个代码中,它将打印出来:
3.31
2.16
4.28
0.56
7.20
3.09
11.18
5.06
在第二个代码中,它将打印出来:
3.310000
2.160000
0.560000
3.090000
5.060000
我必须做些傻事。它只将一半的值放入数组中吗?为什么,如果我直接打印字符串pch时显示所有值?就好像单个命令pch = strtok(NULL, " ");
产生两个输出,我只能捕获一个。
答案 0 :(得分:3)
问题似乎是你的字符串看起来像这样:"1.234 5.678\n9.012 3.456"
,即第二个和第三个数字(以及第四个和第五个数字,依此类推)由{{1}分隔}字符,而不是'\n'
字符。要解决此问题,您只需将' '
添加到您的分隔符字符串:
'\n'
请注意:您的原始代码看起来有效的原因是读取的第二个值实际上是(在我的示例中)pch = strtok(NULL, " \n");
,在打印时看起来像
"5.678\n9.012"
即使它看起来像两个值,但实际上它只是一个字符串。