printf(“请输入书名\ n”); 的scanf( “%S”,BOOKNAME);
我在这样的数据里面: - C编程
但为什么输出这样的数据: - ç
失去编程(字符串)?
为什么
感谢。
答案 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
确实应该用于“格式化”输入。