Arrays 如何在Matlab中声明结构数组和访问(写入/读取)单个字段?

Arrays 如何在Matlab中声明结构数组和访问(写入/读取)单个字段?,arrays,matlab,structure,Arrays,Matlab,Structure,我试图在Matlab中声明一个结构: book = struct('name', '', 'author','', 'price,'', 'date_of_pub','') num_books = input('enter number of books') 然后声明一个数组(书籍列表),其中包含大量书籍的信息 在C语言中,我会这样做(示例代码,不详细介绍) typedef结构{ 字符名[20]; char作者[20]; 浮动价格; date date_of_pub;/'date'是另一个预

我试图在Matlab中声明一个结构:

book = struct('name', '', 'author','', 'price,'', 'date_of_pub','')

num_books = input('enter number of books')
然后声明一个数组(书籍列表),其中包含大量书籍的信息

在C语言中,我会这样做(示例代码,不详细介绍)

typedef结构{
字符名[20];
char作者[20];
浮动价格;
date date_of_pub;/'date'是另一个预定义的结构,包含dd、mm、yy
}书;
int main()
{
int num_books=0;
printf(“输入所需书籍的数量\n”);
scanf(“%d”和num_books);
book*list\u of_books=malloc(num\u books*sizeof(book));
对于(i=0;i
/*另一个循环用于打印书本上的信息,这可能是一个单独的函数等*/


我知道,但我正在寻找具有类似实现的Matlab代码示例以供学习。或者,如果您有任何其他资源,我将非常感谢,使用代码示例。谢谢。

要创建一个包含
num\u图书的
列表
,只需使用:


要直接执行此操作(无需先定义
book
):

后者使用的语法为多值systax(我添加了强调):

S=struct(field1',VALUES1',field2',VALUES2,…)

使用指定的字段和值创建结构数组。值 数组
值1
值2
等必须是相同的单元格数组 大小、标量单元格或单个值 值数组被放置到相应的结构数组元素中。 结果结构的大小与值的大小相同 单元格数组或1乘1(如果所有值都不是单元格)


请注意,为一个字段提供多个值就足够了(我在本例中使用了第一个值),其他字段将自动复制。

并且数组的所有字段中都应该有空值?不一定,但我想实现一个“for循环”检查数组,让用户填写结构的每个字段。哦,我把你的问题搞错了,谢谢。我需要一个for循环(对于I=1:num_books),并要求用户为数组中的每本书分别填写结构的每个字段。尝试了liste_of_books(I)。name=input('enter name of book'))但是它失败了。有什么建议吗?你需要
input
中的标志
's'
来接受字符串输入:
list\u of books(i)。name=input('enter name of books:','s')
谢谢!如果我运气好的话,“input”可以格式化吗?像list\u of books(i)一样。name=input('enter name of books number%d:',i,'s'))或者说“输入”是不可能的?你不能直接这样做。但是
input
的第一个参数可能是
sprintf
的结果(如在C中)。所以:
list\u of_books(i)。name=input(sprintf('enter name of book number%d:',i),'s')
非常感谢你对我的纵容和非常有用的答案。
typedef struct {
char name[20];
char author[20];
float price;
date date_of_pub; //'date' being another predefined struct containing dd, mm, yy
}book;

int main()
{
int num_books = 0;

printf("enter number of desired books\n");
scanf("%d", &num_books);

book *list_of_books = malloc(num_books * sizeof(book));

for(i = 0; i < num_books; ++i){
    printf("enter name of book #%d:\n",i+1);
    scanf("%s", list_of_books[i].name);
    //same for the other info
}
list_of_books = repmat(book, num_books, 1);
book = struct('name',repmat({''},num_books,1), 'author','', 'price','', 'date_of_pub','');