Вызов функции из main () - PullRequest
       19

Вызов функции из main ()

0 голосов
/ 07 октября 2019

Я только начал изучать C, и сейчас я немного сбиваю с толку, как вызывать одну функцию из другой. Вот мой маленький проект, я подумал, что напишу строку "int result = timeToWork;"было бы достаточно для вызова этой функции, но появляется предупреждение «инициализация int из int (*) (int) делает целое число из указателя без приведения»). Проект компилируется, но в результате получаются странные числа вместо печати строки. Что я делаю не так?

#include<stdio.h>
int timeToWork(int input);
int main()
{
    printf("Please, enter the number  \n");
    int key = 0;
    fflush(stdout);
    scanf("%d", &key);
    int result = timeToWork;
    printf("Time = %d  \n",timeToWork);

    return 0;
}
int timeToWork(int input)
{
    if(input == 1)printf("It will take you 25 minutes to get to your destination by car  \n");
    else if(input == 2)printf("It will take you 20 minutes to get to your destination by bike  \n");
    else if(input == 3)printf("It will take you 35 minutes to get to your destination by bus  \n");
    else if(input == 4)printf("It will take you 30 minutes to get to your destination by train  \n");
    else printf("ERROR: please, enter a number from 1 to 4  \n");

    return 0;
}

Ответы [ 3 ]

3 голосов
/ 07 октября 2019

Функция имеет один параметр.

int timeToWork(int input);

Так как вы собираетесь вызывать ее без передачи аргумента функции?

int result = timeToWork;

Даже если функция не принимаетаргумент, который необходимо указывать в скобках после функции deisgnator.

В объявлении выше указатель функции просто преобразуется в указатель на функцию

, он выглядит как

int( *fp )( int ) = timeToWork;
int result = fp;

Чтобы вызвать функцию, вы должны написать

int result = timeToWork( key );

И вместо

printf("Time = %d  \n",timeToWork);

очевидно, что вы имеете в виду

printf("Time = %d  \n", result);

Хотя функция определена неправильно, потому чтоон всегда возвращает 0.

Я думаю, что функция должна быть объявлена ​​и определена следующим образом

int timeToWork( int input )
{
    int time = 0;

    if(input == 1)
    {
        printf("It will take you 25 minutes to get to your destination by car  \n");
        time = 25;
    }
    else if(input == 2)
    {
        printf("It will take you 20 minutes to get to your destination by bike\n");
        time = 20;
    }
    else if(input == 3)
    {
        printf("It will take you 35 minutes to get to your destination by bus  \n");
        time = 35;
    }
    else if(input == 4)
    {
        printf("It will take you 30 minutes to get to your destination by train  \n");
        time = 30;
    }
    else
    {
         printf("ERROR: please, enter a number from 1 to 4  \n");
    }

    return time;
}
0 голосов
/ 07 октября 2019

Ваша функция timeToWork ожидает ввода.

Это должно быть int result = timeTowork(key);

Кроме того, что здесь пытаются печатать ?: printf("Time = %d \n",timeToWork);

0 голосов
/ 07 октября 2019

Вам необходимо отправить параметр типа int, так как функция ожидает его.

int result = timetowork(#your input goes here);
...