Строка двойного преобразования - PullRequest
0 голосов
/ 21 октября 2011

У меня есть следующий код:

FILE *fp;
double Data[9][7];
int i=0,k;                  
fp = fopen ( "dstest 2.mod", "r" ) ;
fscanf(fp, "%E %E %E %E %E %E %E*[ ]",
           &Data[i][0],
           &Data[i][1],
           &Data[i][2],
           &Data[i][3],
           &Data[i][4],
           &Data[i][5],
           &Data[i][6] );

Но всякий раз, когда я запускаю его, я получаю следующие предупреждения:

Read.c: 12: предупреждение: формат «% E» ожидает тип «float *», но аргумент 3 имеет тип «double *»

И это относится ко всем аргументам (Data [i] [j]). Я понятия не имею, что не так. Проблема исчезает, когда я использую плавающие данные вместо двойных данных. Но это не будет соответствовать моим требованиям.

Ответы [ 3 ]

2 голосов
/ 21 октября 2011

man scanf говорит, что вам нужен символ модификатора l для чтения двойного:

fscanf(fp, "%lE %lE...

и т. Д.

0 голосов
/ 21 октября 2011

%E работает с float с;для double s вы должны использовать %lE.

К сожалению, несоответствие между printf и scanf здесь не помогает (printf не поддерживает float s, так как все переменныеаргументы типа float неявно преобразуются в double, но scanf делает различие между двумя типами FP)

0 голосов
/ 21 октября 2011

Используйте %lE для указания double вместо float.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...