Вызов функции из функции - PullRequest
       1

Вызов функции из функции

0 голосов
/ 05 декабря 2018

Я пытаюсь построить CARDIAC Компьютер симулятор в C, и я попал на этап, когда мне нужно вызывать функцию изнутри функции.


В приведенном ниже коде я пытаюсь вызвать функцию JAZ(), в функции CARDIAC(), и я получаю очевидную ошибку, говорящую, что я не могу вызвать ее, поскольку она не была предопределена.
Что мне нужно сделать, чтобы скомпилированная программа набрала printf «Точка достигнута»

Это мой код:

#include <stdio.h>
#include <stdlib.h>

int input;

void CARDIAC(int* ptr)
{
    int input = *ptr;

    while(input<900)
    {
        if(input<100 && input>=0)
        {
            // INP();
        }
        else if(input<200 && input>99)
        {
            printf("Point reached!\n");
            break;
        }
        else if(input<300 && input>199)
        {
            // LDA();
        }
        else if(input<400 && input>299)
        {
            // LDI();
        }
        else if(input<500 && input>399)
        {
            // STA();
        }
        else if(input<600 && input>499)
        {
            // STI();
        }
        else if(input<700 && input>599)
        {
            // ADD();
        }
        else if(input<800 && input>699)
        {
            // SUB();
        }
        else if(input<900 && input>799)
        {
            JAZ();
        }
        else
        {
            // HRS();
        }
    } 
    printf("Done\n");
}

void JAZ()
{   
    input = 180;
    CARDIAC(&input);
}

int main()
{
    input=820;
    CARDIAC(&input);

    return 0;
}


Это вывод, который я получаю:
test.c: In function ‘CARDIAC’:
test.c:47:4: warning: implicit declaration of function ‘JAZ’ [-Wimplicit-function-declaration]
    JAZ();
    ^~~
test.c: At top level:
test.c:57:6: warning: conflicting types for ‘JAZ’
 void JAZ()
      ^~~
test.c:47:4: note: previous implicit declaration of ‘JAZ’ was here
    JAZ();
    ^~~

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Вы должны поместить прототипы функций перед обеими функциями, например:

#include <stdio.h>
#include <stdlib.h>

int input;

/* function prototypes */
void CARDIAC(int *ptr);
void JAZ(void);

void CARDIAC(int* ptr)
{
    int input = *ptr;
 ....
0 голосов
/ 05 декабря 2018

Что мне нужно сделать, чтобы скомпилированная программа напечатала "Точка достигнута!"

в вашей функции Jaz input = 280;поэтому он не будет напечатан, потому что 280> 200, как вы пишете в своем операторе if else if(input<200 && input>99).

 void JAZ()
 {   
     input = 280;       //you must change this value
     CARDIAC(&input);
 }  

и у вас есть еще одна проблема - ваш цикл не закончится.

edit

Я действительно не знаю, что вы пытаетесь делать, покав этой функции, но если вы хотите завершить ее, input должен достигнуть 900 или выше, чтобы остановить цикл while, как вы объявляете в своей функции CARDIAC while(input<900).

вот код, который печатает":

 #include <stdio.h>
 #include <stdlib.h>

int input;
void JAZ();

void CARDIAC(int* ptr)
{
    int input = *ptr;

    //while(input<900)
    //{
        if(input<100 && input>=0)
        {
            // INP();
        }
        else if(input<200 && input>99)
        {
            printf("Point reached!\n");
         //   break;
        }
        else if(input<300 && input>199)
        {
            // LDA();
        }
        else if(input<400 && input>299)
        {
            // LDI();
        }
        else if(input<500 && input>399)
        {
            // STA();
        }
        else if(input<600 && input>499)
        {
            // STI();
        }
        else if(input<700 && input>599)
        {
            // ADD();
        }
        else if(input<800 && input>699)
        {
            // SUB();
        }
        else if(input<900 && input>799)
        {
            JAZ();
        }
        else
        {
            // HRS();
        }
    //} 
    //printf("Done\n");
}

void JAZ()
{   
    input = 180;
    CARDIAC(&input);
}


int main()
{
    input=820;
    CARDIAC(&input);

    return 0;
}
0 голосов
/ 05 декабря 2018

Попробуйте переместить функцию JAZ() до CARDIAC()

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