C scanf有空格问题

时间:2010-12-05 10:40:29

标签: c

  

可能重复:
  How do you allow spaces to be entered using scanf?

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

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

但为什么输出这样的数据: - ç

失去编程(字符串)?

为什么

感谢。

3 个答案:

答案 0 :(得分:18)

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

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

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

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

否则,您可以使用fgets()

 fgets(bookname, sizeof bookname, stdin);

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

答案 1 :(得分:4)

使用fgets()代替scanf()

答案 2 :(得分:0)

bookname乖乖是某种形式的字符;-) 点是这种形式的scanf在第一个空白字符上停止。

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

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