【发布时间】:2014-11-24 22:03:50
【问题描述】:
我正在为我的大学计算机科学课程做一个练习。
我必须使用多个 scanf 和 printf 来获取关于一本书的数据,数据存储在一个结构中。
请求数据的函数是
book_t addbook() {
book_t book;
printf("Insert ISBN: ");
scanf("%s", book.isbn);
printf("Insert author: ");
scanf("%s", book.author);
printf("Insert title: ");
scanf("%s", book.title);
printf("Insert year: ");
scanf("%d", &book.year);
printf("Insert shelf: ");
scanf("%d", &book.shelf);
printf("Insert price: ");
scanf("%lf", &book.price);
return book;
}
但是当我运行程序时,在控制台上我得到了这个:
Insert ISBN: 978-88-08-06485-1
Insert author: Author Name
Insert title: Insert year:
我写了ISBN然后按了return,我写了Author Name然后按了return,我得到了接下来的两个printf,这怎么可能?
感谢您的帮助。
【问题讨论】:
-
下次在询问之前尝试放置一些 printf 并转储一些跟踪。您将教的不仅仅是提问和阅读答案。
-
对于面向行的输入,我真的认为
fgets通常比scanf更好。 -
scanf("%s", book.author);-->scanf(" %[^\n]", book.author); -
如果使用 scanf,那么缓冲区大小的问题就会引起它的丑陋,这是一个很难处理的问题(没有简单的方法可以将 scanf 转换为您拥有的缓冲区大小,然后丢弃多余的字符,如果任何)