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 函数永远不会被调用?我不明白为什么?我以为 return num; 返回什么 num 返回主。如果 num == 0,程序终止,如果 num == 1,则应该调用 read_num 函数。

4

2 回答 2

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;
}
于 2013-02-12T23:17:31.933 回答
4

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

要在主函数中使用“计算”​​值,您必须将 get_num 函数的返回值分配给主函数中的变量“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");
 }
于 2013-02-12T23:08:18.470 回答