çscanf函数与空间问题

çscanf函数与空间问题

问题描述:

可能重复:
How do you allow spaces to be entered using scanf?çscanf函数与空间问题

的printf( “请在书名\ N键”); 012fscanf(“%s”,bookname);

我喜欢这里面的数据: - C程序设计

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

失去编程(串)?

为什么

谢谢。

+0

什么是`bookname`? – khachik 2010-12-05 10:42:56

使用fgets()而不是scanf()

+2

这并不回答这个问题,即“为什么”。 – caf 2010-12-06 00:40:25

+0

谢谢!它工作 – user531119 2010-12-06 01:56:35

bookname切切实实为某种字符的;-) 的一点是,在第一个空格字符这种形式停止scanf

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

scanf真的应该用于“格式化”输入。

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

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

将读到的一切到下一个换行符,并将其存储到bookname,虽然是安全的你应该在转换说明符中指定书名的最大长度;例如如果BOOKNAME预留有30个字符计数空终止符,你应该写

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

否则,你可以使用fgets()

fgets(bookname, sizeof bookname, stdin); 

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