我如何 return "struct" c 用户定义函数中的数据类型?
How do I return "struct" data types in c user defined function?
我需要读取5个城市名称,我的代码有什么问题,请解释
我不想使用 void 数据类型
//read the 5 city using struct
struct census
{
char city[20];
int popullation;
float literacy;
};
struct census citi[5];
struct census read(struct census citi[]);
main()
{
int i;
citi= read(citi);
for(i=0;i<5;i++)
{
printf("%s",citi[i].city);
printf("\n");
}
}
struct census read(struct census citi[])
{
int i;
for(i=0;i<5;i++)
gets(citi[i].city);
return(citi);
}
如何return 使用数据类型 struct 的值,请找出错误并解释错误
您的程序不要求您return read()
函数中的任何内容。不要调用自己的函数read()
,因为那是标准函数的名称,所以这样定义会更好
void readCities(struct census *citi, size_t count)
{
size_t index;
for (index = 0 ; index < count ; index++)
{
fgets(citi[i].city, sizeof(citi[i].city), stdin);
}
}
和 main()
#include <stdio.h>
#include <stdlib.h>
struct census
{
char city[20];
int popullation;
float literacy;
};
void readCities(struct census *citi);
int main()
{
size_t index;
struct census citi[5];
readCities(citi, sizeof(citi) / sizeof(*citi));
for (index = 0 ; index < 5 ; index++)
{
printf("%s\n", citi[index].city);
}
return 0;
}
上面的代码将初始化 struct
,如您所见,您不需要全局变量,除非您真的知道自己在做什么,否则不要使用全局变量,因为@Weather Vane 在下面评论,您可以检查 fgets()
的 return 值和 return 成功读取结构的数量,而不是根本没有 returning,就像这样
#include <stdio.h>
#include <stdlib.h>
struct census
{
char city[20];
int popullation;
float literacy;
};
size_t readCities(struct census *citi);
int main()
{
size_t index;
struct census citi[5];
size_t count
count = readCities(citi, sizeof(citi) / sizeof(*citi));
for (index = 0 ; index < count ; index++)
{
printf("%s\n", citi[index].city);
}
return 0;
}
size_t readCities(struct census *citi, size_t count)
{
size_t index;
size_t successfulCount;
successfulCount = 0;
for (index = 0 ; index < count ; index++)
{
if (fgets(citi[i].city, sizeof(citi[i].city), stdin) != NULL)
successfulCount += 1;
}
return successfulCount;
}
要么你 return 一个单一的结构
struct census readCity(void)
并在调用上下文中循环遍历城市数量,或者将指向结构的指针传递给函数:
void readCity(struct census *pCensus)
使用第二个版本,您可以在调用上下文中使用循环
void readCity(struct census *pCensus)
{
fgets(pCensus->city, sizeof(pCensus->city), stdin);
}
int main(void)
{
int i;
for (i=0; i<5; ++i)
{
readCity(&citi[i]); /* pointer to single struct census */
}
return 0;
}
或函数本身
void readCity(struct census *pCensus) /* pointer to an array with 5 elements */
{
int i;
for (i=0; i<5; ++i)
{
fgets(pCensus->city, sizeof(pCensus->city), stdin);
}
}
int main(void)
{
readCity(citi); /* array is converted to a pointer */
return 0;
}
使用指针更灵活并且可能具有更好的性能,因为它只是指向数据应该读取到的位置的地址。
citi= read(citi);
: 无法将值设置为数组本身。
struct census read(struct census citi[])
...return(citi);
: 不同类型 return 由函数编辑。
如果您想通过将数组传递给函数来更改其内容,则无需 return 数组函数。
如果还 return 一个像 return(citi);
.
这样的数组,你必须被指针接收
例如
struct census *read(struct census citi[]);
....
struct census *cities = read(citi);
如果您 return 到一个没有 return 指针的结构,请执行以下操作。
#include <stdio.h>
struct census {
char city[20];
int popullation;
float literacy;
};
struct census read(void);
int main(void){
struct census citi[5];
int i;
for(i=0; i<5; i++)
citi[i] = read();
for(i=0; i<5; i++)
printf("%s\n", citi[i].city);
return 0;
}
struct census read(void){
struct census citi;
scanf("%19[^\n]%*c", citi.city);
return citi;
}
我需要读取5个城市名称,我的代码有什么问题,请解释 我不想使用 void 数据类型
//read the 5 city using struct
struct census
{
char city[20];
int popullation;
float literacy;
};
struct census citi[5];
struct census read(struct census citi[]);
main()
{
int i;
citi= read(citi);
for(i=0;i<5;i++)
{
printf("%s",citi[i].city);
printf("\n");
}
}
struct census read(struct census citi[])
{
int i;
for(i=0;i<5;i++)
gets(citi[i].city);
return(citi);
}
如何return 使用数据类型 struct 的值,请找出错误并解释错误
您的程序不要求您return read()
函数中的任何内容。不要调用自己的函数read()
,因为那是标准函数的名称,所以这样定义会更好
void readCities(struct census *citi, size_t count)
{
size_t index;
for (index = 0 ; index < count ; index++)
{
fgets(citi[i].city, sizeof(citi[i].city), stdin);
}
}
和 main()
#include <stdio.h>
#include <stdlib.h>
struct census
{
char city[20];
int popullation;
float literacy;
};
void readCities(struct census *citi);
int main()
{
size_t index;
struct census citi[5];
readCities(citi, sizeof(citi) / sizeof(*citi));
for (index = 0 ; index < 5 ; index++)
{
printf("%s\n", citi[index].city);
}
return 0;
}
上面的代码将初始化 struct
,如您所见,您不需要全局变量,除非您真的知道自己在做什么,否则不要使用全局变量,因为@Weather Vane 在下面评论,您可以检查 fgets()
的 return 值和 return 成功读取结构的数量,而不是根本没有 returning,就像这样
#include <stdio.h>
#include <stdlib.h>
struct census
{
char city[20];
int popullation;
float literacy;
};
size_t readCities(struct census *citi);
int main()
{
size_t index;
struct census citi[5];
size_t count
count = readCities(citi, sizeof(citi) / sizeof(*citi));
for (index = 0 ; index < count ; index++)
{
printf("%s\n", citi[index].city);
}
return 0;
}
size_t readCities(struct census *citi, size_t count)
{
size_t index;
size_t successfulCount;
successfulCount = 0;
for (index = 0 ; index < count ; index++)
{
if (fgets(citi[i].city, sizeof(citi[i].city), stdin) != NULL)
successfulCount += 1;
}
return successfulCount;
}
要么你 return 一个单一的结构
struct census readCity(void)
并在调用上下文中循环遍历城市数量,或者将指向结构的指针传递给函数:
void readCity(struct census *pCensus)
使用第二个版本,您可以在调用上下文中使用循环
void readCity(struct census *pCensus)
{
fgets(pCensus->city, sizeof(pCensus->city), stdin);
}
int main(void)
{
int i;
for (i=0; i<5; ++i)
{
readCity(&citi[i]); /* pointer to single struct census */
}
return 0;
}
或函数本身
void readCity(struct census *pCensus) /* pointer to an array with 5 elements */
{
int i;
for (i=0; i<5; ++i)
{
fgets(pCensus->city, sizeof(pCensus->city), stdin);
}
}
int main(void)
{
readCity(citi); /* array is converted to a pointer */
return 0;
}
使用指针更灵活并且可能具有更好的性能,因为它只是指向数据应该读取到的位置的地址。
citi= read(citi);
: 无法将值设置为数组本身。
struct census read(struct census citi[])
...return(citi);
: 不同类型 return 由函数编辑。
如果您想通过将数组传递给函数来更改其内容,则无需 return 数组函数。
如果还 return 一个像 return(citi);
.
这样的数组,你必须被指针接收
例如
struct census *read(struct census citi[]);
....
struct census *cities = read(citi);
如果您 return 到一个没有 return 指针的结构,请执行以下操作。
#include <stdio.h>
struct census {
char city[20];
int popullation;
float literacy;
};
struct census read(void);
int main(void){
struct census citi[5];
int i;
for(i=0; i<5; i++)
citi[i] = read();
for(i=0; i<5; i++)
printf("%s\n", citi[i].city);
return 0;
}
struct census read(void){
struct census citi;
scanf("%19[^\n]%*c", citi.city);
return citi;
}