Это должно маркировать поля с пробелами в строке 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, " ");
выдает два вывода, а я могу захватить только один.