簡體   English   中英

將在一個函數中獲得的值傳遞給另一個函數。 C語言

[英]passing value obtained in one function to another function. C language

我正在編寫一個程序,即加密用戶輸入的數字。 加密步驟由函數執行,我必須編寫。 問題是我必須在下一個函數中使用在一個函數中獲得的值。 這是我想要做的:第一個函數讀取一個整數。 第二個為該整數的每個數字加上4。 問題是如何在第二個函數中使用在第一個函數中輸入的整數。

 void input(int *num)
{
  int numin;
  printf("Please enter an integer greater than 99999: ");
  scanf("%d", &numin);
  while (numin<99999)
    {
      printf("Incorrect input.\n");
      printf("Please enter an integer greater than 99999: ");
      scanf("%d", &numin);
    }    
  num=&numin;
  printf("The number entered is %d\n", numin);
  return;
}
int add4(int num)
{
  int a,b=1,numplus4;
  int i=-1;
  for (numplus4=0; b==0;)
    {
      a=num%10;
      b=num/10;
      num=b;
      a+=4;
      if (a>9)
    a-=10;
      i++;
      numplus4+=a*pow(10, i);
    }
  num=numplus4;
  printf("%d\n", num);
  return num;
}

我搜索過這個主題:但我得到的並沒有幫助我,大多數答案都是針對Javascripts,但我使用的是C.

您實際上並沒有從input函數返回任何內容。

您應該使用return語句返回值,而不是將指針傳遞給正在設置的數字(您沒有正確設置)。

int input(void)
{
    ...

    return numin;
}

然后你可以這樣使用它:

int main(void)
{
    int result = add4(input());
    printf("Result is %d\n", result);

    return 0;
}

在當前函數中沒有返回任何內容的原因是因為在input函數中,參數num是該函數的本地參數。 因此,當函數返回時,您對其所做的任何更改(如分配給它)都將丟失。

正在做什么是有潛在危險的,因為它接近未定義的行為。 您希望使指針指向局部變量,但是當函數返回存儲該局部變量的內存時,不再有效訪問。

可以使用指針參數來返回值,這就是所謂的通過引用傳遞參數。 但是你不像你那樣分配指針 ,而是使用解除引用運算符(一元* ):

*num = numin;

為了使它有效,你必須傳遞已經分配的變量的地址,如下所示:

int num;
input(&num);  /* Use the address-of operator to create a pointer */

但是,我建議在本答案的第一部分中使用解決方案,直到您了解有關指針及其工作原理的更多信息。

您必須取消引用指針才能將輸入的值保存到指針指向的內存位置:

void input(int* num) {
    int numin;
    printf("Please enter an integer greater than 99999: ");
    scanf("%d", &numin);
    while (numin<99999)
    {
       printf("Incorrect input.\n");
       printf("Please enter an integer greater than 99999: ");
       scanf("%d", &numin);
   }    
  printf("The number entered is %d\n", numin);
  *num=numin;  // <-- This line needs the '*' at the beginning
} 

如果將變量聲明為靜態變量,則可以在另一個函數中使用在一個函數中獲得的值。

暫無
暫無

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

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