2015-09-02 3 views
1

Привет, просто получаю некоторые странные выходы из попыток прочитать входы как двойные значения в C. Эта проблема не возникает, когда входы целые, есть все равно, чтобы заставить его работать с двойным?C, Чтение двойных значений из текстового файла

#include "stdafx.h" 
    int main(void) 
    { 
     double a, b, c, d, i; 
     FILE *inp; 
     inp = fopen("C:\\Users\\student\\Documents\\Visual Studio2012\\Projects\\ConsoleApplication3\\test.txt", "r"); 
     i = fscanf(inp, "%f %f %f %f", &a, &b, &c, &d); 
     while (i != EOF) 
     { 
      printf("a = %f & %d \n", a, i); 
      printf("b = %f & %d \n", b, i); 
      printf("c = %f & %d \n", c, i); 
      printf("d = %f & %d \n", d, i); 
      printf("%d \n", EOF); 
      i = fscanf(inp, "%f %f %f %f", &a, &b, &c, &d); 
     } 

     fclose(inp); 


     return 0; 
    } 
+0

Всегда проверяйте возвращаемое значение 'fopen'. – Downvoter

+0

Также 'while (i! = EOF)' является слабым. 'i' может иметь значение' 1', а затем 'printf ("b =% f &% d \ n", b, i); '- неопределенное поведение. Лучше делать 'while (i == 4)' – chux

ответ

3

Изменить спецификатор для %lf в fsacnf и printf заявления. Как это -

fscanf(inp,"%lf %lf %lf %lf", &a, &b, &c, &d); 

Другие проблемы -

1.Also i объявлен как double но в printf вы распечатываете его с помощью спецификатора %d, поэтому вы передаете неправильный аргумент -

printf("a = %f & %d \n", a, i); // similar in all printf's 

Так, согласно мне объявить i как int, а затем распечатать.

2. Также вы всегда должны проверить возврат fopen, так что проверьте его.