【发布时间】:2021-02-16 13:13:24
【问题描述】:
我正在使用结构和函数练习 C。当我要求用户输入有关书籍的信息时,代码运行良好,直到我要求输入出版商名称,在这里我总是得到返回 EXIT_FAILURE 无论输入是什么。我认为我在scanf 中编写变量的方式出现了一些错误,因为它是另一个结构中的结构,我仍然没有完全理解这个问题。
下面是代码(不完整):
#define MAXB 2
#define MAXSTR 100
typedef struct date // publication date
{
int day, month, year;
}DATE;
typedef struct authors
{
char authorName[MAXSTR];
char authorwebp[MAXSTR];
DATE birthDate;
}AUTHOR;
typedef struct publishers
{
char publisherName[MAXSTR];
char publishAddress[MAXSTR];
}PUBLISHER;
typedef struct books
{
char title[MAXSTR];
char type[MAXSTR];
PUBLISHER publisher;
AUTHOR author[5];
DATE publishDate;
}BOOK;
void add_book( BOOK *b )
{
if (scanf(" %[^\n]s", b->publisher.publisherName) !=1); // always getting EXIT_FAILURE
return EXIT_FAILURE;
}
int main()
{
BOOK b[MAXB];
add_book(b);
}
提前感谢您的帮助。
【问题讨论】:
-
去掉if语句中的分号,void函数也不应该返回EXIT_FAILURE
-
在
(scanf(" %[^\n]s" ... !=1);行中,您有一个;,这就是为什么您总是返回EXIT_FAILURE,删除它并检查代码是否符合您的预期。 -
它工作正常,谢谢大家。
-
@Luke_ 我应该将函数更改为 int 吗?
-
@LuísOliveira 是的,EXIT_FAILURE 扩展为 1,而 EXIT_SUCCESS 扩展为 0
标签: c function input struct nested