开发者

C - Call a function

开发者 https://www.devze.com 2022-12-30 02:18 出处:网络
I want to get a value from a function in other function i think i have to call a function in other function, then call it on main, but how?

I want to get a value from a function in other function i think i have to call a function in other function, then call it on main, but how?

void funcA(PEOPLE people[], int *total)
{
    FILE *fp;
  开发者_开发知识库  char line[100];
    fp = fopen("example.txt", "r");
    if (fp == NULL) {
    exit(1);
    }

    else {
    fgets(line, 100, fp);   //get a number from the txt
    total = atoi(line); //convert to int
    }
}

void funcB(PEOPLE people[], int *total)
{
    int i;
    for (i = 0; i < total; i++) {
    printf("%s\n", people[i].name);
    }
    funcA(people, &total);
}

void main()
{
    PEOPLE people[100];
    int *total;
    funcB(people, &total);
}

What i'm doing wrong? I need the value from total to do cicle for;


First, you should call funcA from funcB like this:

funcA(people, total);

Then, if I understand you correctly, you want to return a value from your function(s). You can do it like this:

int funcA(PEOPLE people[], int *total){
  int ret;
  // set ret to desired value
  return ret;
}
...
int value = funcA(people, total);

After sorting this out, you need to initialize your variables correctly, sort out the naming discrepancies (linha vs line, PEOPLE vs PERSON) and all other issues noted by others.


There are numerous problems here (total is a pointer, for loop on the pointer, never initialized to anything, etc etc).

To answer your question, functions have return types:

 int foo(void) {
     return 3;
 }

 int main(int argc, char**argv) {
    printf("Foo returned %d\n", foo());
    return 0;
 }

In this case foo returns int. You return values with the return keyword.

You can also return data in pointers:

void foo(int* c) {
    *c = 3;
}

int main(int argc, char**argv) {
   int h;
   foo(&h);
   printf("Foo returned %d\n", h);
   return 0;
 }

This is helpful if you have multiple values to return.


Oh boy !

First what You are doing right or at least it seems so. You are drawing attention and get points for upvotes, despite the fact, that the code looks like typed in directly to the editor box on the Stackoverflow and never checked with any compiler. Good job :)

Now what's wrong. The list is long but some tips

void main()
{
    PERSON person[100];
    int *total;
    funcB(people, &total);
}

void funcB(PEOPLE people[], int *total);

It would be nice if You showed us the definitions of (probably) structs PEOPLE and PERSON. In the code we can see, there is no definition of people - the variable you pass to funcB. You define a pointer to int - total and don't initialize it. Then You pass an address of that pointer to funcB which takes int* not int** as a second argument. Those types are not compatible.

void funcB(PEOPLE people[], int *total)
{
    int i;
    for (i = 0; i < total; i++) {
        printf("%s\n", people[i].name);
    }
    funcA(people, &total);
}

void funcA(PEOPLE people[], int *total)

You use a pointer in the loop condition instead of the value pointed too. There is no value, because You didn't initialize the pointer in main, but here You have incompatible types in the condition. You pass an address of the pointer to funcA instead of the pointer, like in main.

void funcA(PEOPLE people[], int *total)
{
    FILE *fp;
    char line[100];
    fp = fopen("example.txt", "r");
    if (fp == NULL) {
        exit(1);
    }

    else {
        fgets(line, 100, fp);   //get a number from the txt
        total = atoi(linha);    //convert to int
    }
}

You use an undefined symbol 'linha' - I guess it's a misspelling of 'line'. Then You assign an int to a pointer instead of an int pointed to by that pointer.


Check these:

  1. exit() function exited from your program, not only from function. You can use return; to return from the function.
  2. total is not initialized when you use that. Use funcA(people, &total); line before the for loop in your function funcB.
0

精彩评论

暂无评论...
验证码 换一张
取 消