如何在C语言的数组中输入字符?
char name[2];

scanf("%c",name);

printf("%c",name);

[伙计们,我刚刚开始学习C。我对上面的代码感到好奇,我从printf输出中得到的内容与我输入的字符不同。相反,输出是一些看起来很有趣的符号。谁可以给我解释一下这个?谢谢。

4
投票

对于%c说明符,scanf需要将字符存储到的位置的地址,但是printf需要字符的值而不是其地址。在C语言中,数组在被引用时会衰减为指向数组第一个元素的指针。因此,正在向scanf传递name数组的第一个元素的地址,该位置将存储字符;但是,printf也正在传递地址,这是错误的。 printf应该是这样的:

printf("%c", name[0]);

请注意,scanf参数在技术上是可以的,当指向单个字符的指针就足够了时,传递一个数组有点奇怪。最好声明一个字符并显式传递其地址:

char c;
scanf("%c", &c);
printf("%c", c);

另一方面,如果您尝试读取字符串而不是单个字符,则应该使用%s而不是%c

3
投票

都读一个字符

char name[2];
scanf("%c",name);
printf("%c",name[0]);

或读取字符串

char name[2];
scanf("%1s",name);
printf("%s",name);
0
投票

您需要%s,因为名称包含2个元素。 %c用于单个字符,因此如果您希望用户输入某些内容,例如“ as”(没有“”)和要打印出来的程序,您需要%s。

char name[2];

scanf(" %s", name);
printf("%s",name);
-2
投票

如果输入的字符数小于或等于2,您将获得正确的输出,就像输入的字符数大于3时,输入​​将不正确