首先,您可能想知道为什么我不会只使用1个功能:这背后的原因是我需要这个用于更大的项目并希望尽可能保持功能分离。我也不想使用任何全局变量。 这是我用来测试它的代码:
#include <stdio.h>
int Variables (int a, int b, int c) /* Example of a function wich stores
variables with user input */
{
printf("input variables");
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
printf("%d:%d:%d\n", a, b, c);
return a, b, c;
}
int main (void)
{
int a, b, c;
/* I want to use the variables with userinput from the Variables function */
printf ("\n%d:%d:%d\n", Variables(a, b, c));
return 0;
}
不幸的是,输出总是只返回我存储在函数Variables()变量中的1个输入,然后返回2个完全不相关的随机数。我想知道如何解决这个问题。 另外还有我,我对编程很新,所以我可能忽略了一些东西。提前感谢您的回答!
编辑:显然我犯了很多错误。感谢所有有用的答案!我想要问的正确问题是&#34;如何从函数&#34;中返回多于1个值。对不起,这个意外的重复问题。也许这个问题仍然可以帮助那些遇到同样误解的人(认为你可以从函数中返回超过1个值,从而在互联网上搜索错误的问题)。
答案 0 :(得分:1)
您不能返回多个值。一种选择是将指向这些变量的指针传递给函数:
void Variables(int *a, int *b, int *c)
{
printf("input variables");
scanf("%d", a);
scanf("%d", b);
scanf("%d", c);
printf("%d:%d:%d\n", *a, *b, *c);
}
int main(void)
{
int a, b, c;
Variables(&a, &b, &c)
printf("\n%d:%d:%d\n", a, b, c);
return 0;
}
请注意,还有其他&
和*
。
另一个选择是使用结构:
struct variables {
int a, b, c;
};
struct variables Variables(void)
{
struct variables var;
scanf("%d", &var.a);
scanf("%d", &var.b);
scanf("%d", &var.c);
return var;
}
int main(void)
{
struct variables var = Variables();
printf("\n%d:%d:%d\n", var.a, var.b, var.c);
return 0;
}
您必须了解逗号,
运算符。这就是为什么你的代码没有像你期望的那样工作的原因。你可以在这里阅读:
答案 1 :(得分:0)
一个干净而简单的选择是一次只用一个参数调用 #include <stdio.h>
int Variables ()
{
printf("input variables");
scanf("%d", &a);
return a;
}
int main (void)
{
printf ("\n%d:%d:%d\n", Var(),Var(),Var());
return 0;
}
3次。像这样:
{{1}}
答案 2 :(得分:0)
您无法在C中返回多个值。 您使用的逗号运算符在这里毫无用处。你的函数只返回最后一个。
您可以分两步拆分函数调用并使用指针或返回一个结构,如下所示:
#include <stdio.h>
void Variables (int *a, int *b, int *c) /* Example of a function wich stores
variables with user input */
{
printf("input variables");
scanf("%d", a);
scanf("%d", b);
scanf("%d", c);
printf("%d:%d:%d\n", *a, *b, *c); // Dunno why you need to print twice...
}
int main (void)
{
int a, b, c;
Variables(&a, &b, &c);
printf ("\n%d:%d:%d\n", a, b, c );
return 0;
}
怎么样?