如何用cycle for和scanf填充我的结构数组中的每个结构?
我是这个网站的新手,它看起来很酷 我有一个问题,我想做一个程序,让用户决定要申报多少本书,然后用户填写每本书的信息(例如:用户想要3本书,所以他填写这3本书的所有信息) 我想我需要一个数组结构,但我不知道如何循环这个填充过程 这是我的代码:如何用cycle for和scanf填充我的结构数组中的每个结构?,c,arrays,for-loop,structure,C,Arrays,For Loop,Structure,我是这个网站的新手,它看起来很酷 我有一个问题,我想做一个程序,让用户决定要申报多少本书,然后用户填写每本书的信息(例如:用户想要3本书,所以他填写这3本书的所有信息) 我想我需要一个数组结构,但我不知道如何循环这个填充过程 这是我的代码: struct book { char bname[20]; int pages; char author[20]; long price; }; printf("enter number of books to s
struct book
{
char bname[20];
int pages;
char author[20];
long price;
};
printf("enter number of books to store");
scanf("%d",&unumber);
for (i=0;i<number_of_books;i++) {printf's and scanf's to fill each struct}
struct book
{
char bname[20];
整版;
char作者[20];
多头价格;
};
printf(“输入要存储的图书数量”);
scanf(“%d”,和unumber);
对于(i=0;i有两种方法。一种是简单地使用书籍结构数组,另一种是使用链表。下面,我将为您提供两种解决方案:
第一个使用结构数组的解决方案:
#include <stdio.h>
#include <stdlib.h>
#define MAXBOOKS 100
struct book {
char bname[20];
int pages;
char author[20];
long price;
};
int main()
{
struct book books[MAXBOOKS];
int number_of_books;
printf("enter number of books to store\n");
scanf("%d",&number_of_books);
// writing books
for (int i=0;i<number_of_books;i++) {
printf("Enter new book record: Book_Name, Pages, Author, Price\n");
scanf("%s %d %s %ld",books[i].bname, &books[i].pages, books[i].author, &books[i].price);
}
//reading books
printf("Entered books records: Book_Name, Pages, Author, Price\n");
for (int i=0;i<number_of_books;i++) {
printf("%s\t %d\t %s\t %ld\n",books[i].bname, books[i].pages, books[i].author, books[i].price);
}
return 0;
}
$ ./bin/books
Enter number of books to store: 2
book[ 1] name : Tom Sawyer
book[ 1] pages : 321
book[ 1] author: Mark Twain
book[ 1] price : 2199
book[ 2] name : Huckelberry Finn
book[ 2] pages : 298
book[ 2] author: Mark Twain
book[ 2] price : 1999
The Books Entered Were:
Book 1 "Tom Sawyer"
author : Mark Twain
pages : 321
price : 2199
Book 2 "Huckelberry Finn"
author : Mark Twain
pages : 298
price : 1999
#包括
#包括
#定义MAXBOOKS 100
结构书{
char bname[20];
整版;
char作者[20];
多头价格;
};
int main()
{
结构图书[马克斯图书];
书籍的整数;
printf(“输入要存储的图书数量\n”);
scanf(“%d”和图书数量);
//写书
对于(inti=0;作者,&temp->price);
temp->next=NULL;
if(head==NULL){
printf(“在头部,如有”);
压头=温度;
curnode=temp;
}否则{
curnode->next=temp;
curnode=curnode->next;
}
}
//读书
温度=水头;
while(temp!=NULL){
printf(“%s\t%d\t%s\t%ld”,临时->名称,临时->页面,临时->作者,临时->价格);
printf(“\n”);
温度=温度->下一步;
}
返回0;
}
在循环中读取输入时,一个主要的关注点是确保每次读取后刷新stdin
,以防止尾随的换行符被解释为下一个read
语句的输入。但是,有很多方法可以做到这一点,使用scanf
最简单的方法是小心使用尾随的换行符
的精心编制的格式
语句。以下说明了此方法:
#include <stdio.h>
#define MAXS 256
struct book
{
char bname[20];
int pages;
char author[20];
long price;
};
int main () {
struct book books[MAXS] = {{ {0}, 0, {0}, 0 }}; /* initialize all values to zero (null) */
int nbooks = 0;
int i = 0;
printf ("\nEnter number of books to store: ");
scanf("%d%*c",&nbooks); /* read nbooks, and consume newline */
if (nbooks < 1) { /* validate number of books to enter */
fprintf (stderr, "error: invalid entry for 'nbooks'\n");
return 1;
}
for (i = 0; i < nbooks; i++) /* enter values for each book, use */
{ /* scanf to read each value AND the */
printf ("\n book[%2d] name : ", i + 1); /* newline character, emptying stdin */
scanf ("%[^\n]%*c", books[i].bname); /* after each read. */
printf (" book[%2d] pages : ", i + 1);
scanf ("%d%*c", &books[i].pages);
printf (" book[%2d] author: ", i + 1);
scanf ("%[^\n]%*c", books[i].author);
printf (" book[%2d] price : ", i + 1);
scanf ("%ld%*c", &books[i].price);
}
printf ("\n\nThe Books Entered Were:\n"); /* output info for each book entered */
i = 0;
while (*books[i].bname)
{
printf ("\n Book %-3d \"%s\"\n", i + 1, books[i].bname);
printf (" author : %s\n", books[i].author);
printf (" pages : %d\n", books[i].pages);
printf (" price : %ld\n", books[i].price);
i++;
}
printf ("\n");
return 0;
}
如果书名中有空格,scanf(“%s%d%s%d”,temp->bname…
将不起作用。@kriyeta我正试图运行您的代码,但它返回了一个错误,mallocs声明可以吗?引入一个抽象的数据结构,而不是问题所要求的,从而使简单问题的答案复杂化是不明智的。这只会增加不必要的混乱。@Jey我修改了代码,它是ru现在进行nning。您也可以使用结构数组进行此操作。
$ ./bin/books
Enter number of books to store: 2
book[ 1] name : Tom Sawyer
book[ 1] pages : 321
book[ 1] author: Mark Twain
book[ 1] price : 2199
book[ 2] name : Huckelberry Finn
book[ 2] pages : 298
book[ 2] author: Mark Twain
book[ 2] price : 1999
The Books Entered Were:
Book 1 "Tom Sawyer"
author : Mark Twain
pages : 321
price : 2199
Book 2 "Huckelberry Finn"
author : Mark Twain
pages : 298
price : 1999