我正在尝试编写一个C程序,根据结构成员的大小,应该将许多成员读入数组。
正如您在下面的代码中看到的,基于bookPtr->size
的值,我将把很多成员添加到数组中。
如果bookPtr-> size为3,我将读取所有成员x,y和z。
如果bookPtr-> size为2,我将读取成员x和y。
如果bookPtr-> size为1,我将读取成员x。
如果bookPtr-> size为0,则不会读取任何成员。
但我想进一步优化代码。有一种方法可以减少代码长度。谢谢。
#include<stdio.h>
typedef struct
{
int x;
int y;
int z;
int size;
}Book;
void Get (Book* bookPtr)
{
Book mybook;
int size = bookPtr->size;
if(size == 3)
{
mybook->x = bookPtr->x;
mybook->y = bookPtr->y;
mybook->z = bookPtr->z;
}
else if(size == 2)
{
mybook->x = bookPtr->x;
mybook->y = bookPtr->y;
}
else if(size == 1)
{
mybook->x = bookPtr->x;
}
else
{
}
}
int main()
{
Book bookPtr;
bookPtr.x = 2 ;
bookPtr.y = 2 ;
bookPtr.z = 20 ;
bookPtr.size = 2 ;
Get(&bookPtr);
return 0;
}
答案 0 :(得分:3)
val
答案 1 :(得分:0)
你可以通过使用数组内部结构来真正优化代码, 但如果您不想更改结构代码,那么下面的代码看起来很酷。
void Get (Book* bookPtr)
{
Book mybook;
int size = bookPtr->size;
if(--size >= 0) {
mybook->x = bookPtr->x;
}
if(--size >= 0){
mybook->y = bookPtr->y;
}
if(--size >= 0)
{
mybook->z = bookPtr->z;
}
}
答案 2 :(得分:0)
我建议将所有相关的int
字段放在数组中。
#include<stdio.h>
struct Book {
int data[3];
int size;
};
void
Print(struct Book *p)
{
int i, sz = p->size;
for (i = 0; i < sz; ++i)
{
printf("data[%d] = %d\n", i, p->data[i]);
}
return;
}
void
Get(struct Book *p)
{
int i, sz = p->size;
struct Book mybook;
mybook.size = sz;
for (i = 0; i < sz; ++i)
{
mybook.data[i] = p->data[i];
}
Print(&mybook);
return;
}
int
main(void)
{
struct Book book;
book.data[0] = 2;
book.data[1] = 2;
book.data[2] = 20;
book.size = 2;
Get(&book);
return 0;
}
这意味着代码可以容纳任意数量的int
字段,以防将来需求发生变化,而不是感染代码的每个部分,假设有三个字段名为x
, y
结构中的z
和Book
。