使用指针更改结构内的数据
Change data inside a struct using pointers
我创建了一个包含图书信息的结构。然后创建了两个函数:一个更改结构中每种类型数据的信息,另一个打印该信息。
当我输入数据时它工作正常但是当它尝试打印它时它崩溃了,是因为当我调用 main() 中的函数时 IDE 变得混乱了吗?还是其他我看不到的原因?
代码:
#include <stdio.h>
#include <string.h>
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
};
//function declarations
void printBook( struct Books *book );
void changeBook ( struct Books *book );
int main()
{
struct Books Book1; //declare book1 of type book
struct Books Book2; //declare book2 of type book
//book 1 specification
strcpy( Book1.title, "C Programming");
strcpy( Book1.author, "Nuha Ali");
strcpy( Book1.subject, "C Programming Tutorial");
Book1.book_id = 6495407;
//book 2 specification
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Zara Ali");
strcpy( Book2.subject, "Telecom Billing Tutorial");
Book2.book_id = 6495700;
//calling declared functions
changeBook ( &Book1 );
printBook ( &Book1 );
changeBook ( &Book2 );
printBook ( &Book2);
return 0;
}
// print Book data function declaration
void printBook( struct Books *book )
{
printf("Book title : %s\n", book -> title);
printf("Book author : %s\n", book -> author);
printf("Book subject : %s\n", book -> subject);
printf("Book book_id : %d\n", book -> book_id);
}
// Change book data function declaration
void changeBook ( struct Books *book )
{
printf("Change book title info (max 50 characters)\n");
scanf("%s", book -> title);
printf("Change book author info max 50 characters\n");
scanf("%s", book -> author);
printf("Change book subject info max 100 characters\n");
scanf("%s", book -> subject);
printf("Change book_id info (only string values)\n");
scanf("%d", book -> book_id);
}
scanf("%d", &book->book_id);
^
您需要为 scanf
提供指向 int
的指针
改变
scanf("%d", book -> book_id);
到
scanf("%d", &book -> book_id);
因为 scanf 需要一个指向要扫描的整数的指针。
您可以在 IDE 中编辑编译设置。如果给出选项 -Wall -Wextra
,gcc 会针对此类错误发出警告。
a.c:72:7: warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int' [-Wformat=]
scanf("%d", book -> book_id);
我创建了一个包含图书信息的结构。然后创建了两个函数:一个更改结构中每种类型数据的信息,另一个打印该信息。 当我输入数据时它工作正常但是当它尝试打印它时它崩溃了,是因为当我调用 main() 中的函数时 IDE 变得混乱了吗?还是其他我看不到的原因?
代码:
#include <stdio.h>
#include <string.h>
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
};
//function declarations
void printBook( struct Books *book );
void changeBook ( struct Books *book );
int main()
{
struct Books Book1; //declare book1 of type book
struct Books Book2; //declare book2 of type book
//book 1 specification
strcpy( Book1.title, "C Programming");
strcpy( Book1.author, "Nuha Ali");
strcpy( Book1.subject, "C Programming Tutorial");
Book1.book_id = 6495407;
//book 2 specification
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Zara Ali");
strcpy( Book2.subject, "Telecom Billing Tutorial");
Book2.book_id = 6495700;
//calling declared functions
changeBook ( &Book1 );
printBook ( &Book1 );
changeBook ( &Book2 );
printBook ( &Book2);
return 0;
}
// print Book data function declaration
void printBook( struct Books *book )
{
printf("Book title : %s\n", book -> title);
printf("Book author : %s\n", book -> author);
printf("Book subject : %s\n", book -> subject);
printf("Book book_id : %d\n", book -> book_id);
}
// Change book data function declaration
void changeBook ( struct Books *book )
{
printf("Change book title info (max 50 characters)\n");
scanf("%s", book -> title);
printf("Change book author info max 50 characters\n");
scanf("%s", book -> author);
printf("Change book subject info max 100 characters\n");
scanf("%s", book -> subject);
printf("Change book_id info (only string values)\n");
scanf("%d", book -> book_id);
}
scanf("%d", &book->book_id);
^
您需要为 scanf
int
的指针
改变
scanf("%d", book -> book_id);
到
scanf("%d", &book -> book_id);
因为 scanf 需要一个指向要扫描的整数的指针。
您可以在 IDE 中编辑编译设置。如果给出选项 -Wall -Wextra
,gcc 会针对此类错误发出警告。
a.c:72:7: warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int' [-Wformat=]
scanf("%d", book -> book_id);