2015-05-22 29 views
0

我读的书“C程序设计一种现代方法”,我看到了一个问题: 显示如何加以区分:"%f" VS "%f "(以后%F有一个空格)功能scanf()需要帮助有关函数scanf函数用C

你能帮我理解"%f "是如何工作的。

+0

这里有一些有用的scanf相关信息:http://stackoverflow.com/questions/1247989/how-do-you-allow-spaces-to-be-entered-using-scanf – iammowgli

+0

你可以看到更多的细节在[here](http://www.cplusplus.com/reference/cstdio/scanf/)中有'scanf()'函数。阅读'格式'的描述,你的问题的答案是如此清楚地解释。 –

回答

0

第二个需要一个空格,然后输入一个浮点数。如果你有多个浮子从用户采取那么你可以写类似 -

scanf("%f %f", &f1, &f2); 
+0

谢谢。但为什么我必须输入一些东西?吸这个! –

+0

@Nguyen。我相信scanf忽略的唯一“空格”是:输入流中存在的选项卡,空格键和换行符(“输入”键)。当“空格”位于格式说明符之间时,例如scanf(“%f%f”,...),它被忽略。但在第二个例子中,空格后面没有其他格式说明符,即(“%f”)...所以它可能期望流中有更多的数据。然后,在你输入'something'之后,它试图将它存储在一个变量中,但是因为只有一个变量'x',例如scanf(“%f”,&x),它会忽略你输入的'东西'并返回。 – iammowgli

+1

@NguyễnVăn-Dũng,为什么在这里使用俚语。如果您认为某个帖子(回答/问题)不正确,您可能会投票拒绝投票。请不要使用俚语。 – KajolK

3

"%f"stdin指示scanf()

  1. 扫描和丢弃的白色空间,直到没有更多的输入或者非白色遇到空间。把char放回stdin
  2. 扫描char表示float。继续,直到没有更多的输入或遇到一个非-char。把char放回stdin

"%f "指示scanf()到上述步骤1和2,然后

  • 扫描从stdin并丢弃空白,直到没有更多的输入或非空白遇到。把char放回stdin。 (就像步骤1)

  • 注意:所有scanf()格式说明除外"%c""%n""%[]"执行进一步的扫描之前的步骤1。

    0

    如果%f后使用白色空间,即

    scanf("%f "); 
    

    scanf()将跳过换行符。

    +0

    注意:它将跳过下列换行符以及任意数量的以下空格。 – chux