为什么我打印的char不起作用?

时间:2015-04-10 16:38:21

标签: c char printf

这让我大吃一惊。我真的不知道这是什么。我有以下代码:

char cSexMF = 'M';

printf("%c \n", &cSexMF);

它应该输出M但是每次我运行代码时它都会出现一个不同的数字或字母或符号,或者它真正想要的任何东西。我认为这是一个直截了当的命令,但显然我甚至不能再这样了。

任何人都可以提供一些有关为什么会发生这种情况的见解吗?

3 个答案:

答案 0 :(得分:5)

因为您传递了错误的参数。

"%c"说明符需要char,并且您传递的变量地址为char *

要使其有效,只需删除运营商的&地址

即可
printf("%c\n", cSexMF);

您可能会感到困惑,因为如果scanf()需要&,原因是scanf()需要修改变量的内容,并为其传递地址它通过指针修改它。 printf()函数需要值,而不是地址。

并且还启用编译器警告。作为一名学习c语言的程序员,它可以为你节省很多问题,甚至实验程序员也会使用警告来防止愚蠢的拼写错误。

答案 1 :(得分:2)

你正在传递一个指针。不要这样做。

char cSexMF = 'M';
printf("%c \n", cSexMF);

在变量名称前面添加&时,会导致地址提取。在这里,您尝试将指向char 的指针传递给期望 char 的调用。

答案 2 :(得分:1)

在变量之前添加一元&时,它会返回该变量的地址。因此,您试图打印cSexMF的地址而不是它所持有的值。

使用printf()时,您无需添加&,只需

printf("%c \n", cSexMF);

就足够了(除非你真的想输出地址,但是你需要使用%p类型说明符)。

通常,当您使用scanf()时,在变量之前添加&(因为您将值存储在该地址),但在使用{{1时}时不需要这样做}}