Почему моя программа возвращает адрес памяти? - PullRequest
1 голос
/ 07 апреля 2019

Я написал программу под названием AverageFloat, которая должна сканировать ввод числа. Это позволяет пользователю вводить число входов с плавающей запятой, а затем функция получает среднее значение этих входов.

Однако, когда я скомпилировал и запустил программу, она взяла мой ввод, но вернула -1610612736.

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

#include <stdio.h>

float averageFloat(int a);

int y;
float z; 

int main()
{
    int n;
    printf("Please input a number of floats you want to include "); 
    n = scanf("%d", &y); 
    averageFloat(n);

    return 0;
}

float averageFloat(int a){

    for(int i = 0; i < a; i++){
        printf("Please enter the float variables you want your program to average");
        scanf("%f", &z); 
        z += z;
    }
    printf("the average float is %d", z/a);
    return z / a; 
}

Я ожидаю, что это займет мой ввод n, скажем, n = 5.

Я ожидаю, что смогу ввести 5 чисел с плавающей запятой, скажем, 0,5, 0,2, 0,3, 0,1 и 1,5, а затем разделить их на n

Спасибо за чтение.

Ответы [ 3 ]

3 голосов
/ 07 апреля 2019

В вашем коде есть пара проблем:

  • Использование scanf для записи в переменную z, которая также является вашей суммирующая переменная. Вы в основном перезаписываете итог каждый раз, когда читаете ввод

  • Сканирование десятичного числа в переменную с плавающей запятой приведет к непредвиденным результатам. Нужно изменить scanf("%d",&z); на scanf("%f",&z);

  • Оператор printf ожидает целое число, и вы передаете указатель на число с плавающей точкой. Поэтому необходимо изменить printf("the average float is %d", z/a); на printf("the average float is %f", z/a);

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

2 голосов
/ 07 апреля 2019

Когда вы делаете scanf("%f", &z);, вы уничтожаете любое значение z.Вы также не проверяете, был ли scanf успешным.

Вы должны сделать что-то вроде:

float zz= 0.0;
scanf("%f", &zz); 
z += zz;

Кроме того, после того, как вы закончили, вы можете сделать следующее:

printf("the average float is %d", (int) z/a);
return z / a;

Или:

printf("the average float is %f", z/a);
return z / a; 

Первое усечение до int (%d) и второе печатание a float.

Вы также должныубедитесь, что a не ноль.

Вы также должны использовать:

averageFloat(y);
0 голосов
/ 07 апреля 2019

Прежде всего, переменные не должны быть глобальными.Во-вторых, вы добавляете в z, а затем читаете его.И вы, вероятно, имеете в виду, чтобы вызвать функцию AverageFloat (y).

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