带有空格问题的C scanf

可能重复:
如何使用scanf输入空格?

printf(“请输入书名\ n”); 的scanf( “%S”,BOOKNAME);

我在这样的数据里面: – C编程

但为什么输出这样的数据: – C.

失去编程(字符串)?

为什么

谢谢。

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

  scanf("%[^\n]", bookname); 

它将读取下一个换行符的所有内容并将其存储到bookname ,但为了安全起见,您应该在转换说明符中指定bookname的最大长度; 例如,如果bookname有30个字符的空间来计算空终止符,你应该写

  scanf("%29[^\n]", bookname); 

否则,您可以使用fgets()

  fgets(bookname, sizeof bookname, stdin); 

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

使用fgets()而不是scanf()

好吧bookname surly是某种char 😉 Point是这种forms的scanf停在第一个空格字符上。

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

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