我正在为我的大学计算机科学课程练习。
我必须使用多个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并按下了返回,我写了作者姓名并按下了返回,我得到了下两个printf,这怎么可能?
感谢您的帮助。
答案 0 :(得分:2)
可能在您提供作者姓名时,您提供了其全名(第一个+姓氏)。 C仅将作者名称解析为名字,并且由于缓冲区有另一个字符串,因此它被用作标题名称,因此不会要求您提供另一个字符串。
下面是一个复制品:
在这个例子中,作者被设置为" Jon"标题设置为Doe:
答案 1 :(得分:0)
scanf读取,直到找到空格字符。在你的情况下:
ISBN: blabla -> scanf reads blabla
Author: Author Name -> scanf reads Author
title: -> scanf has already Name in buffer, so Name is set into title immediatly
year: -> input next.
因此,跳过了标题的输入,因为scanf已经有一个缓冲值