#c #floating-point #extract #c-strings #fgets
Вопрос:
Я пытаюсь прочитать в строке значения с плавающей запятой, такие как
1.1 -100.0 2.3
и мне нужно сохранить их в массиве.
Я использую этот fgets()
метод для преобразования входных данных в строку. Могу ли я в любом случае использовать эту строку для заполнения массива с плавающей запятой значениями? Или есть лучший способ сделать это?
#include <stdio.h>
int main(){
char input [500];
float values [50];
fgets(input, 500, stdin);
// now input has a string with all the values
// and the values array needs to be filled with the values
}
Комментарии:
1. Используется
strtok()
для разделения входной строки, затем вызываетсяatof()
для преобразования каждой из них в afloat
.2. Если это всегда точно фиксированное / известное количество чисел с плавающей запятой, то также можно использовать
sscanf
.3. Внесение поправок в предложение @kaylum:
sscanf
4. Для получения дополнительной информации см. Эти заметки к классу .
Ответ №1:
Вы можете подать sscanf
заявку на введенную строку.
Вот упрощенная демонстрационная программа.
#include <stdio.h>
int main(void)
{
char input[20];
float values[3];
fgets( input, sizeof( input ), stdin );
size_t n = 0;
char *p = input;
for ( int pos = 0; n < 3 amp;amp; sscanf( p, "%f%n", values n, amp;pos ) == 1; p = pos )
{
n;
}
for ( size_t i = 0; i < n; i )
{
printf( "%.1f ", values[i] );
}
putchar( 'n' );
return 0;
}
Если введенная строка
1.1 -100.0 2.3
тогда вывод массива values
1.1 -100.0 2.3