Scanf неправильно сохраняет значения - PullRequest
0 голосов
/ 09 февраля 2019

при использовании scanf внутри функции, которую я определил, для изменения значений в массиве, который я передал по ссылке на эту функцию, он вообще не меняет значение, будучи двойным типом.

Когда я меняю местозаполнитель с: scanf ("% 1f", & x) на scanf ("% d", & x), он работает как положено, но мне нужно использовать double для этого проекта.

int main()
{
double varArray[MAX];
zeroFill(varArray);
}


void fill(double *array) {
    for(int i =0; i<MAX; i++){
    printf("what is index %d?\n", i);
    scanf("%f",(array+i));
    printf("%f \n", *(array+i));
}

вместо изменения значения по этому индексу она изменяет его 0,000000 или номер jiberish:

 what is index 0?
 1
 0.000000
 what is index 1?
 2
 0.000000
 what is index 2?
 3
 -0.000000
 what is index 3?
 4
 0.000000
 what is index 4?
 5
 0.000000
 what is index 5?
 6
 0.000000
 what is index 6?
 7

182043948477041810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000

Таким образом, для входов 3 и 7он вернул -0,000000 и большое число av.Однако это не согласуется, поэтому другие входные данные будут давать аналогичные выходные данные

1 Ответ

0 голосов
/ 09 февраля 2019

Чтобы записать результат scanf в double, используйте %lf.%f для float.

Не используйте %d с double.%d предназначен для int.

(При печати можно использовать %lf или %f для float или double. Это связано с тем, что значение floatавтоматически повышается до значения double при вызове printf или при вызове любой функции, аргумент которой соответствует ... в параметрах, или любой функции, объявленной без прототипа.)

...