3

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

我有以下程序

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

o/p 当我给出一个int值(例如 - 9)时,它显示为 9.000000

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

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

4

3 回答 3

10

请注意,char代码中的任何地方都没有 s。

这是scanf应该工作的方式。如果您检查返回值scanf (就像您应该做的那样!),您可能会看到它返回 0,这意味着没有匹配的项目。

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

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

于 2013-07-16T05:39:34.593 回答
4

首先,您通常应该printf用换行符结束格式字符串,\n否则调用fflush.

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

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

返回值

这些函数返回成功匹配和分配的输入项的数量,该数量可能少于提供的数量,或者在早期匹配失败的情况下甚至为零。

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

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

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

于 2013-07-16T05:40:40.190 回答
1

scanf在您编写的表格中,它将尝试查找和读取数字(int/ float)直到第一个非数字字符(换行符、空格、任何字母)。字母是ints,但这是因为scanf它应该表现的方式。阅读文档。

于 2013-07-16T05:39:54.720 回答