为什么对float的char值赋值不起作用

时间:2013-07-16 05:37:12

标签: c

注意:这个问题非常简单,但是当我在谷歌搜索时,我没有得到任何明确的澄清。

我有以下程序

int main()
{
 float c;
 scanf("%f",&c);
 printf("%f",c);
}

O / P 当我给出int值(e,g - 9)时,它显示为9.000000

但是当我给出像'a'这样的char值时,它没有显示并显示0.000000。我知道memory representation of floatint完全不同,但是当我给出{{1}时如何它显示但是当我给int value (9)时,它也是一个int(97)没有显示。

它是如何发生的。 char (a)分配期间的内存表示是什么。

3 个答案:

答案 0 :(得分:10)

请注意,代码中的任何位置都没有char

scanf 假设的工作方式。如果您检查scanf 的返回值(就像您应该的那样!),您可能会看到它返回0,表示没有项目匹配。

当您为scanf()提供"%f"格式字符串时,这意味着“我希望您尝试为我提供一个浮点数字。当您提供类似'a'的输入时',它不会匹配任何东西,因为'a'不是有效的浮点数。

http://www.cplusplus.com/reference/cstdio/scanf/

答案 1 :(得分:4)

首先,您通常应该使用换行符printf结束\n格式字符串,或者调用fflush

然后,您应该阅读scanf上的文档,即其手册页scanf(3)

它可能会失败,并返回成功匹配的数量:

  

返回值

     

这些函数返回成功匹配的输入项数   和分配,可以少于提供,甚至零   早期匹配失败的事件。

     

如果在任何一个输入结束之前到达输入结束,则返回值EOF   第一次成功转换或匹配失败。 EOF是   如果发生读错误也会返回,在这种情况下会出错   设置流的指示符(请参阅ferror(3)),并设置errno   表明错误。

当您针对a转化规范输入输入字母%f时,会发生故障。在您的情况下,c变量保持不变(即“未初始化”)。

您应该测试scanf的结果(在您的情况下失败时为<=0)。

答案 2 :(得分:1)

您编写的表单中的

scanf将尝试查找和读取数字(int / float),直到第一个非数字字符(换行符,空格,任何字母)。字母为int,但这是因为scanf及其行为方式。阅读文档。