1

我正在编写一个程序,对用户输入的数字进行加密。加密步骤由我必须编写的函数执行。问题是我必须在下一个函数中使用在一个函数中获得的值。这是我想要做的:第一个函数读取一个整数。second 将该整数的每个数字加 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。

4

3 回答 3

2

您实际上并没有从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 */

但是,我建议在此答案的第一部分中使用该解决方案,直到您了解有关指针及其工作原理的更多信息。

于 2012-10-27T05:28:09.453 回答
1

您必须取消引用指针才能将输入的值保存到指针指向的内存位置:

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
} 
于 2012-10-27T05:33:16.997 回答
0

如果变量被声明为静态变量,则在一个函数中获得的值可以在另一个函数中使用。

于 2012-10-27T05:53:05.643 回答