选择结构的数据成员
Selecting data members of the structures
我正在尝试编写一个 C 程序,其中基于结构成员的大小,应该将许多成员读入数组。
正如您在下面的代码中看到的,根据 bookPtr->size
的值,我将向数组中添加那么多成员。
如果 bookPtr->size 是 3 ,我将读取所有成员 x,y 和 z。
如果 bookPtr->size 是 2 ,我将读取成员 x 和 y。
如果 bookPtr->size 为 1 ,我将读取成员 x。
如果 bookPtr->size 为 0 ,则不读取任何成员。
但我想通过某种方式优化代码 further.Is,使代码长度为 reduced.Thanks。
#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;
}
你真的可以通过在结构中使用数组来优化代码,
但是,如果您不想更改结构代码,那么下面的代码看起来很酷。
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;
}
}
像这样
void Get (Book* bookPtr){
Book mybook;
switch(mybook.size = bookPtr->size){
case 3: mybook.z = bookPtr->z;
case 2: mybook.y = bookPtr->y;
case 1: mybook.x = bookPtr->x;
break;
default:
break;
}
}
我建议将所有相关的 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
字段以防将来需求发生变化,而不是假设存在三个名为 [=13= 的字段来感染代码的每个部分]、y
和 z
在 Book
结构中。
我正在尝试编写一个 C 程序,其中基于结构成员的大小,应该将许多成员读入数组。
正如您在下面的代码中看到的,根据 bookPtr->size
的值,我将向数组中添加那么多成员。
如果 bookPtr->size 是 3 ,我将读取所有成员 x,y 和 z。
如果 bookPtr->size 是 2 ,我将读取成员 x 和 y。
如果 bookPtr->size 为 1 ,我将读取成员 x。
如果 bookPtr->size 为 0 ,则不读取任何成员。
但我想通过某种方式优化代码 further.Is,使代码长度为 reduced.Thanks。
#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;
}
你真的可以通过在结构中使用数组来优化代码, 但是,如果您不想更改结构代码,那么下面的代码看起来很酷。
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;
}
}
像这样
void Get (Book* bookPtr){
Book mybook;
switch(mybook.size = bookPtr->size){
case 3: mybook.z = bookPtr->z;
case 2: mybook.y = bookPtr->y;
case 1: mybook.x = bookPtr->x;
break;
default:
break;
}
}
我建议将所有相关的 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
字段以防将来需求发生变化,而不是假设存在三个名为 [=13= 的字段来感染代码的每个部分]、y
和 z
在 Book
结构中。