2013-02-12 86 views
1
#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函数永远不会被调用?我不明白为什么?我认为返回数量;将返回的数字返回给main。如果num == 0,则程序终止,如果num == 1,则应调用read_num函数。C编程:如何返回main并调用另一个函数?

+1

是的,它会返回到'main',但你永远不会使用返回值。你的'scanf'调用只是修改num'的参数版本,而不是一个'main'具有。 – zneak 2013-02-12 23:01:44

+0

我明白了。那么当用户输入1时如何调用函数read_num?我如何将整数“1”传回给main? – James 2013-02-12 23:05:43

+1

num = get_num (num)或我们e为num的指针。学习如何通过引用或按值传递价值 – Gilad 2013-02-12 23:06:52

回答

4

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

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

num = get_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"); 
} 
+3

“并且一切都应该没问题。” - 除非他没有输入1. – Matt 2013-02-12 23:13:15

+0

谢谢!如果我想将两个值返回给main,该怎么办?如果用户输入1,则调用read_num函数。如果用户输入2,则调用write_num函数。在这种情况下,我必须返回两个值回到主,如果我想返回两个值,我必须使用一个指针吗? – James 2013-02-12 23:16:56

5

有不少你的代码错误: main()getNum()都被声明为返回一个int,但main()永远不会返回任何东西,只有当用户输入1getNum()回报。如果您有一个函数返回void以外的任何其他值,请确保每个可能的控制流都有适当的return语句。

然后有值的调用与通过引用调用的问题。你应该仔细看看,因为这是不适合解释的地方,许多人写得比我更好。

read_num(num); num在这里没有定义,你可能会明白,一旦你知道C如何传递参数,那就更好了。

返回值也是如此。用C返回值的函数(由返回类型声明为int get_num(),当你调用一个函数一样,你可以在return值赋值给一个变量,在主,你可以写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; 
} 
相关问题