注意:这个问题非常简单,但是当我在谷歌搜索时,我没有得到任何明确的澄清。
我有以下程序
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 float
与int
完全不同,但是当我给出{{1}时如何它显示但是当我给int value (9)
时,它也是一个int(97)没有显示。
它是如何发生的。 char (a)
分配期间的内存表示是什么。
答案 0 :(得分:10)
请注意,代码中的任何位置都没有char
。
scanf
假设的工作方式。如果您检查scanf
的返回值(就像您应该的那样!),您可能会看到它返回0,表示没有项目匹配。
当您为scanf()
提供"%f"
格式字符串时,这意味着“我希望您尝试为我提供一个浮点数字。当您提供类似'a'的输入时',它不会匹配任何东西,因为'a'
不是有效的浮点数。
答案 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
及其行为方式。阅读文档。