带空间问题的C-scanf

带空间问题的C-scanf,c,C,可能重复: printf(“请输入书名”); scanf(“%s”,书名) 我在数据中输入了如下内容:- C程序设计 但为什么要这样输出数据:- C 丢失编程(字符串) 为什么 谢谢。使用而不是scanf()好吧书名surly是一种字符;-) 关键是,在这个表单中,scanf在第一个空格字符上停止 您可以使用不同的格式字符串,但在这种情况下,您可能更喜欢使用fgets scanf确实应该用于“格式化”输入 转换说明符%s导致scanf在第一个空白字符处停止。如果需要能够读取空白字符,则需要使用

可能重复:

printf(“请输入书名”); scanf(“%s”,书名)

我在数据中输入了如下内容:- C程序设计

但为什么要这样输出数据:- C

丢失编程(字符串)

为什么


谢谢。

使用而不是
scanf()
好吧
书名
surly是一种字符;-) 关键是,在这个表单中,
scanf
在第一个空格字符上停止

您可以使用不同的格式字符串,但在这种情况下,您可能更喜欢使用
fgets


scanf
确实应该用于“格式化”输入

转换说明符
%s
导致
scanf
在第一个空白字符处停止。如果需要能够读取空白字符,则需要使用
%[
转换说明符,例如

 scanf("%[^\n]", bookname);
它将读取下一个换行符之前的所有内容,并将其存储到
bookname
,不过为了安全起见,您应该在转换说明符中指定bookname的最大长度;例如,如果bookname可以容纳30个字符(计算空终止符),您应该写入

 scanf("%29[^\n]", bookname);
否则,您可以使用
fgets()


我个人更喜欢
fgets()
解决方案。

这并不能回答问题,即“为什么”。非常感谢。好信息:)
 fgets(bookname, sizeof bookname, stdin);