Как получить числа с плавающей точкой из файла

#c #data-manipulation

Вопрос:

У меня есть этот файл txt, в котором есть эти три номера «4.151120 4.100 7.9999». Я должен создать программу, которая прочитает его и выполнит с ними некоторые дальнейшие операции. Но я не могу

 int main (int argc, char *argv[]){
    FILE *arq;
    
    arq = fopen("values.txt","r");
    
    float num1, num2, num3;
    
    fscanf(arq,"%.6f %.6f %.6f", amp;num1, amp;num2, amp;num3);
    printf("%.6f %.6f %.6f", num1, num2, num3);
    
    fclose(arq);
    
    return 0;
    
 

Комментарии:

1. Как именно это «не работает»?

2. Похоже, единственная проблема в том, что вам нужно изменить %.6f значение %f в fscanf вызове, как в ответе Вонбранда.

3. Никогда не используйте функцию scanf() без проверки кода возврата!

Ответ №1:

Это так же просто, как:

 #include <stdio.h>

int main(void)
{
    FILE *arq;

    arq = fopen("values.txt", "r");

    float n1, n2, n3;

    if(fscanf(arq, "%f%f%f", amp;n1, amp;n2, amp;n3) != 3)
        fprintf(stderr, "Something's wrongn");
    else
        printf("Numbers are %f, %f, %fn", n1, n2, n3);
    
    fclose(arq);
}
 

Вам не нужно указывать точность (спорно при вводе), и если вы не хотите сопоставлять определенные строки между числами вместо разделения пробелами (по умолчанию), вы можете это исключить.

В качестве особого разрешения вы можете опустить return 0 «от main «, это подразумевается здесь.

Комментарии:

1. Хороший совет насчет return 0; того, что линия не нужна.

2. Это . неверно с scanf() et al. Использование ширины может быть уместным, но обычно это не так. Это ограничивает количество непустых символов в числовом поле. Если бы код должен был использоваться O , то первое считанное число было бы 4.15 , а второе 1120 -для образцов данных.

Ответ №2:

Один из подходов состоял бы в том, чтобы прочитать файл в виде строки, а затем обозначить строку пробелами. Для каждого токена вы можете отформатировать его как число. Я не знаю, лучший ли это способ сделать это на c, но это жизнеспособное решение.