c - 如何从c中的单个函数返回具有不同数据类型的多个值
问题描述
我想从 input() 函数返回一个 char 变量和两个 int 变量到主函数,所以我该怎么做
char Input(char ctgry, int cls, int day)
{
do
{
printf("Category (G-Government, N-Non government) : ");
scanf("%c", &ctgry);
if (ctgry != 'G' && ctgry != 'N')
printf("Invalid\n");
} while (ctgry != 'G' && ctgry != 'N');
do
{
printf("Ward Class: ");
scanf("%d", &cls);
if (cls != 1 && cls != 2 && cls != 3)
printf("Invalid\n");
} while (cls != 1 && cls != 2 && cls != 3);
printf("No. of days: ");
scanf("%d", &day);
return;
}
解决方案
在 C 中,您只能返回一个值。所以没有办法返回一个字符和两个整数。
但是,有一些解决方法。
您可以对结构中的变量进行分组并返回一个结构值。喜欢:
struct retVal
{
char a;
int b;
int c;
}
struct retVal foo(...)
{
struct retVal result;
...
result.a = some_value;
result.b = some_value;
result.c = some_value;
return result;
}
并称之为:
struct retVal values = foo(...);
printf("Values after function call %c %d %d\n", values.a, values.b, values.c);
或者,您可以将指针传递给两个整数,然后直接在函数中更新它们。
喜欢:
char foo(int* i1, int* i2, ...)
{
char result;
...
result = some_value;
*i1 = some_value;
*i2 = some_value;
return result;
}
并称之为:
int x;
int y;
char c = foo(&x, &y, ...);
printf("Values after function call %c %d %d\n", c, x, y);
推荐阅读
- c# - Entity Framework 3.1 track M:N thenBy entity if AsNoTracking() is added
- typescript - 使用 new 创建时,Typescript 不键入检查对象?
- reactjs - 无法在特定路由中呈现正确的组件
- python-3.x - 按短长短的顺序对字符串进行排序
- python - 代码跳过 Python 中的命令。谁能告诉我为什么?
- linux - 如何在 v1 和 v2 之间映射 cgroup freezer 接口文件?
- android - 如何在自定义 WebViewClient 中获取 WebView 对象?
- javascript - Nuxt.js:自动为所有组件添加插件
- python - 获取指定时区的日期时间,与计算机中设置的日期时间无关
- vue.js - Vue安装问题