该功能未将用户输入映射到变量
#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);
}
输入5之类的内容时,我希望可以打印出5张
答案 0 :(得分:3)
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;
}
答案 1 :(得分:2)
这是因为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
}
答案 2 :(得分:1)
任何体面的书,教程或类都应该提到C中的参数是按值传递的。这意味着该值将被复制到局部参数变量中,并且对该局部变量的任何修改都不会反映在原始变量上。
有两种可能的解决方案:
简单的一个:从函数返回值
int input(void)
{
int x;
printf("Enter a number: ");
scanf("%d", &x);
return x;
}
...
int h = input();
printf("%d\n", h);
复杂的解决方案:模仿通过引用传递
void input(int *x)
{
printf("Enter a number: ");
scanf("%d", x);
}
...
int h;
input(&h); // Pass a pointer to the variable
printf("%d\n", h);
答案 3 :(得分:1)
您先致电input(h);
,然后致电void input(int x) { ... }
。 h
的值被复制到x
如果您想找回更改后的值,则可以:
return
来自函数input()
的值:
// notice the int before function name
int input();
int main (void)
{
int h = 0;
// notice h = ...
h = input(h);
printf("%d\n", h);
}
// notice the int before function name
int input()
{
int x;
printf("Enter a number: ");
scanf("%d", &x);
// notice the return
return x;
}
或者,将变量作为引用(指针)传递:
// notice int *
void input(int *x);
int main (void)
{
int h = 0;
// notice the &h this is used to pass addresses of variables
input(&h);
printf("%d\n", h);
}
// notice int *
void input(int *x)
{
printf("Enter a number: ");
// notice the & removed
scanf("%d", x);
}
答案 4 :(得分:0)
问题是您不了解函数的基本工作流程。也许您应该再次修改您的基础知识和理论。 这是应该编写您的代码的方式(我已尽力对您的代码进行了最小的更改):
#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;
}
您应该将函数input()
的返回类型设置为int
。然后,变量(在这种情况下为y
)将获得input()
返回的值,并在main()
函数中使用该变量以显示用户已给出的实际输入。