Как вызывать функции внутри функции

#c #function

#c #функция

Вопрос:

Я написал код, использующий некоторые функции. В функции GetType пользователю запрашивается ввод, jf если ввод равен v или V, должна быть запущена функция getHeight, за которой следует функция vArea. Если входные данные равны h или H, то должна быть запущена функция hArea. Если есть какой-либо другой ввод, код должен отображать «недопустимый ввод», а затем вернуться к функции GetType и снова запросить у пользователя ввод.

Мне нужно, чтобы значение, вычисленное либо hArea, либо vArea, было присвоено функции GetType, чтобы затем я мог использовать это значение в основной функции для решения уравнения. код, который я написал, не работает, вот как выглядит функция GetType:

 double getType()
{
    char type;
    double getType, d, h;

    printf("nEnter wind turbine type (v or h):");
    scanf("%c", amp;type);

    if (type == 'v' || type == 'V')
    {
        getHeight();
        vArea(d, h);
    }
    else if (type == 'h' || type == 'H')
    {
        hArea(d);
    }
    else
    {
        printf("Invalid input!");
        int c;
        while ((c = getchar()) != 'n' amp;amp; c != EOF)
            return getType;
    }
    return type;
}
  

Видите ли вы какие-либо ошибки, которые нуждаются в исправлении?

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

1. Возможно, вам нужно прочитать о » Как вызвать функцию, чтобы она возвращала значение в качестве результата вызывающему и чтобы этот результат был назначен чему-то внутри вызывающего? «? Я думаю, что учебное пособие по C помогло бы.

2. Подводя итог: в вашем вопросе много неясного, а также в вашем коде, и, вероятно, также неправильно.

Ответ №1:

Я видел другую вещь, которая выглядит необычно для меня:

  1. while ((c = getchar()) != 'n' amp;amp; c != EOF) В этой переменной c объявлен как целочисленный тип чуть выше этого оператора, и вы сравниваете его с символьным типом, здесь у вас могут возникнуть проблемы. Измените символ типа переменной c .
  2. В другой части ваша возвращаемая getType переменная с инициализируется как double, но не присваивается никакого значения.
  3. Аналогично, переменной d и h в вашем коде не присвоено значение, и вы отправляете их в качестве аргумента в вашей vArea функции. Пожалуйста, позаботьтесь и об этом.
  4. Убедитесь, что ваша getchar() функция должна возвращать один символ.

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

1. я исправил номера 1 и 2. Что касается 3, d и h равны функциям, которым присвоено значение в основной функции, я отправляю их в функцию vArea, чтобы это значение использовалось в функции, которая выглядит следующим образом « double vArea (double d, double h) { double vArea; vArea = (pi d h); return vArea; } « проблема, с которой я сталкиваюсь, заключается в том, что я не уверен, что функции vArea и hArea вызываются должным образом в операторы if и else if и, следовательно, когда я печатаю значение для функции GetType, оно неверно.

2. братан, если вы инициализируете их в своей основной функции, вы должны передать их в качестве аргумента в функции GetType. Затем скопируйте эти значения в вашу локальную переменную d и h.

3. в основной функции я инициализирую d и h. мне нужна функция GetType для запуска функции vArea или hArea в зависимости от входных данных, в которых затем будет вычисляться площадь внутри функций area, если вы меня понимаете.

4. я понимаю тебя, братан, но я говорю, что в vArea function вы отправляете аргументы d и h, значение которых определено в main function, но эти переменные не являются частью d и h, пока вы не передадите их своей функции. Локальная переменная имеет свое значение в функции, а не в другой функции, пока вы не передали ее в другую функцию.

5. да, братан, я понимаю тебя, так как я мог бы это исправить, чтобы аргументы d и h передавались через функцию GetType для правильного вычисления области

Ответ №2:

Ваш код выглядит не совсем корректно, объявленный вами «GetType» является double , и то, как вы его вызвали (если я правильно понимаю), также неверно, поскольку «return GetType» вернет только этот double, который неинициализирован. Для достижения вашей цели я бы рекомендовал вам реструктурировать вашу функцию, просто выполнив следующее: function()

 int function() {
    char type;
    printf("nEnter wind turbine type (v or h):");
    scanf("%c", amp;type);
    while(type != 'v' || type |= 'h' .... )
    {
        printf("n Invalid input, please Enter wind turbine type (v or h):");
        scanf("%c", amp;type);
    }

    // do the actual function here
}
  

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

1. Возможно, вам захочется переосмыслить это утверждение: while(type != 'v' || type |= 'h' .... )

Ответ №3:

Полегче, брат, просто сделай это, измени свой прототип функции на этот.

 double getType(double d, double h);
  

Вы определяете, где вы вызываете функцию GetType для этого.

 getType(d,h);
  

Наконец, в объявлении функции

 double getType(double d, double h)
{
double d1,h1;
d1=d;
h1=h1;

/*then rest of your code*/
}