簡體   English   中英

C編程:如何返回main並調用另一個函數?

[英]C programming: How to return to main and call another function?

#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; 返回num返回main。 如果num == 0,則程序終止;如果num == 1,則應調用read_num函數。

您的代碼有很多錯誤: main()getNum()都聲明為返回int,但是main()從不返回任何內容,並且getNum()僅在用戶輸入1返回。 如果您有一個函數返回除void以外的任何值,請確保每個可能的控制流都具有適當的return語句。

然后是按值調用與按引用調用的問題。 您應該真正查一下,因為這不是解釋的正確位置,而且許多人都寫得比我更好。

read_num(num); num在這里未定義,一旦您知道C如何傳遞參數,您可能會更好地理解。

返回值也是如此。 C語言中的函數的返回值(由返回類型聲明為int get_num() 。當調用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;
}

C使用按值傳遞而不是按引用傳遞,因此,當您輸入get_num時,您只是使用存儲在主函數變量“ num”中的值的COPY。 在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");
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM