C编程:如何返回main并调用另一个函数?

时间:2013-02-12 22:59:15

标签: c return return-value

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

int get_num(int num);
void read_num(int num);

int main()
{
  int num;
  do
  {
    get_num(num);
    if(num == 1)
      read_num(num);

   }while(num != 0);
 }

 int get_num(int num)
 {
   printf("Please enter an integer from 0 and 2\n");
   scanf("%d", &num);
   if (num == 1)
     return num;
 }

 void read_num(int num);
 {
   printf("Hello.\n");
 }

当用户输入1时,read_num函数永远不会被调用?我不明白为什么?我以为返回num;返回返回main的num。如果num == 0,则程序终止,如果num == 1,则应调用read_num函数。

2 个答案:

答案 0 :(得分:5)

您的代码存在很多错误: main()getNum()都声明为返回int,但main()永远不返回任何内容,getNum()仅在用户输入1时返回。如果函数返回void以外的任何函数,请确保每个可能的控制流都有适当的return语句。

然后出现了按值调用与按引用调用的问题。你应该看一下,因为这不是解释的正确位置,很多人写的比我更好。

read_num(num); num在这里是未定义的,一旦你知道C如何传递参数,你就会明白这一点。

返回值也是如此。 C中的函数返回值(由int get_num()中的返回类型声明。当您调用这样的函数时,您可以将return值赋给变量。在main中,您可以编写int number = get_num()

您的代码可能看起来有点像,但我不确定这是不是您真正想要它做的事情:

int main()
{
    int num;
    do {
        num = get_num();
        if(num == 1) {
            printf("%d\n", num);
        }   
    } while(num != 0);
    return 0;
}

int get_num(int num)
{
    printf("Please enter an integer from 0 and 2\n");
    scanf("%d", &num);
    if (num == 1)
        return num;
    return 0;
}

答案 1 :(得分:4)

C使用pass by值而不是通过引用传递,因此当您输入get_num时,您只需使用存储在main函数变量“num”中的值的COPY。在get_num中操作变量“num”的值不会对主函数中变量“num”的值进行任何更改。

要在main函数中使用“calculated”值,必须将get_num函数的返回值赋给main函数中的变量“num”。 只需替换

get_num(num);

num = get_num(num);

一切都应该没问题。

编辑:要返回多个值,您必须将指针传递给函数返回值的所需存储位置。 作为示例,这里使用指针代替程序的变体。

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

int get_num(int num);
void read_num(int num);

int main()
{
  int num = 0; /* better give it a defined value here */
  int n_args_read;
  do
  {
    n_args_read = get_num(&num);
    if(n_args_read == 1)
      read_num(num);

   }while(num != 0);
 }

 int get_num(int *num)
 {
   printf("Please enter an integer from 0 and 2\n");
   return scanf("%d", num);
 }

 void read_num(int num);
 {
   printf("Hello.\n");
 }