C 为什么函数没有将输入映射到我的变量?
函数未将用户输入映射到变量C 为什么函数没有将输入映射到我的变量?,c,parameter-passing,scanf,C,Parameter Passing,Scanf,函数未将用户输入映射到变量 #include <stdio.h> void input(int x); int main (void) { int h = 0; input(h); printf("%d\n", h); } void input(int x) { printf("Enter a number: "); scanf("%d", &x); } #包括 无效输入(int x); 内部主(空) { int h=0; 输入
#include <stdio.h>
void input(int x);
int main (void)
{
int h = 0;
input(h);
printf("%d\n", h);
}
void input(int x)
{
printf("Enter a number: ");
scanf("%d", &x);
}
#包括
无效输入(int x);
内部主(空)
{
int h=0;
输入(h);
printf(“%d\n”,h);
}
无效输入(整数x)
{
printf(“输入一个数字:”);
scanf(“%d”和&x);
}
当输入类似于5的内容时,我希望5被打印出来
x
通过值传递,scanf
更改了x
的本地副本。您需要返回用户输入:
int input();
int main (void)
{
int h;
h = input();
printf("%d\n", h);
}
int input()
{
int x;
printf("Enter a number: ");
scanf("%d", &x);
return x;
}
x
通过值传递,scanf
更改了x
的本地副本。您需要返回用户输入:
int input();
int main (void)
{
int h;
h = input();
printf("%d\n", h);
}
int input()
{
int x;
printf("Enter a number: ");
scanf("%d", &x);
return x;
}
这是因为C中的参数是通过副本传递的。因此,您修改的
x
只是您传递内容的副本,在input
的末尾,该副本将被丢弃。相反,您可以传递一个指针。由于scanf
已经对指针进行了操作,因此修复非常简单:
void input(int *x); // parameter is now a pointer to an int
int main(void)
{
int h = 0;
input(&h); // pass the address instead of the value
printf("%d\n", h);
}
void input(int *x)
{
printf("Enter a number: ");
scanf("%d", x); // no need to take the address again
}
这是因为C中的参数是通过副本传递的。因此,您修改的
x
只是您传递内容的副本,在input
的末尾,该副本将被丢弃。相反,您可以传递一个指针。由于scanf
已经对指针进行了操作,因此修复非常简单:
void input(int *x); // parameter is now a pointer to an int
int main(void)
{
int h = 0;
input(&h); // pass the address instead of the value
printf("%d\n", h);
}
void input(int *x)
{
printf("Enter a number: ");
scanf("%d", x); // no need to take the address again
}
任何像样的书、教程或类都应该提到C中的参数是按值传递的。这意味着该值被复制到局部参数变量中,对该局部变量的任何修改都不会反映在原始变量上 有两种可能的解决方案:
int input(void)
{
int x;
printf("Enter a number: ");
scanf("%d", &x);
return x;
}
...
int h = input();
printf("%d\n", h);
任何像样的书、教程或类都应该提到C中的参数是按值传递的。这意味着该值被复制到局部参数变量中,对该局部变量的任何修改都不会反映在原始变量上 有两种可能的解决方案:
int input(void)
{
int x;
printf("Enter a number: ");
scanf("%d", &x);
return x;
}
...
int h = input();
printf("%d\n", h);
input(h)代码>然后无效输入(intx){…}
。h
的值被复制到x
如果要恢复更改后的值,可以:
从函数input()
返回一个值:
或者,将变量作为引用(指针)传递:
调用input(h)代码>然后无效输入(intx){…}
。h
的值被复制到x
如果要恢复更改后的值,可以:
从函数input()
返回一个值:
或者,将变量作为引用(指针)传递:
问题是您不了解功能的基本工作流程。也许你应该再次修改你的基础知识和理论。
这是您的代码应该如何编写的(我已经尽了最大努力对代码进行了最小的更改):
#包括
int输入();
内部主(空)
{
int-y;
y=输入();
printf(“%d\n”,y);
}
int输入()
{
printf(“输入一个数字:”);
scanf(“%d”和&x);
返回x;
}
您应该将函数input()
的返回类型设置为int
。然后,一个变量(y
在本例中)可以获取input()
返回的值,并在main()
函数中使用它来显示用户给出的实际输入。问题在于您不了解函数的基本工作流程。也许你应该再次修改你的基础知识和理论。
这是您的代码应该如何编写的(我已经尽了最大努力对代码进行了最小的更改):
#包括
int输入();
内部主(空)
{
int-y;
y=输入();
printf(“%d\n”,y);
}
int输入()
{
printf(“输入一个数字:”);
scanf(“%d”和&x);
返回x;
}
您应该将函数input()
的返回类型设置为int
。然后,变量(y
在本例中)可以获取input()
返回的值,并在main()中使用它
函数以显示用户提供的实际输入。我建议您研究通过引用传递与通过值传递之间的差异:我建议您研究通过引用传递与通过值传递之间的差异:稍微好一点,但由于您的函数现在返回值,因此不需要任何参数。是的。:)谢谢你的建议!稍微好一点,但由于您的函数现在返回一个值,因此不需要任何参数。是的。:)谢谢你的建议!
#include <stdio.h>
int input();
int main (void)
{
int y;
y = input();
printf("%d\n", y);
}
int input()
{
printf("Enter a number: ");
scanf("%d", &x);
return x;
}