[英]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.