Как читать в нескольких числах с плавающей запятой в одной строке, а затем добавлять их в массив?

#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() для преобразования каждой из них в a float .

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