char name[2];
scanf("%c",name);
printf("%c",name);
[伙计们,我刚刚开始学习C。我对上面的代码感到好奇,我从printf输出中得到的内容与我键入的字符不同。相反,输出是一些看起来很有趣的符号。谁可以给我解释一下这个?谢谢。
对于%c
说明符,scanf
需要将字符存储到的位置的地址,但是printf
需要字符的值而不是其地址。在C语言中,数组在被引用时会衰减为指向数组第一个元素的指针。因此,正在向scanf
传递name
数组的第一个元素的地址,该位置将存储字符;但是,printf
也正在传递地址,这是错误的。 printf
应该是这样的:
printf("%c", name[0]);
请注意,scanf
参数在技术上是可以的,当指向单个字符的指针就足够了时,传递一个数组有点奇怪。最好声明一个字符并显式传递其地址:
char c;
scanf("%c", &c);
printf("%c", c);
另一方面,如果您尝试读取字符串而不是单个字符,则应该使用%s
而不是%c
。
都读一个字符
char name[2];
scanf("%c",name);
printf("%c",name[0]);
或读取字符串
char name[2];
scanf("%1s",name);
printf("%s",name);
您需要%s,因为名称包含2个元素。 %c用于单个字符,因此如果您希望用户输入某些内容,例如“ as”(没有“”)和要打印出来的程序,您需要%s。
char name[2];
scanf(" %s", name);
printf("%s",name);
如果输入的字符数小于或等于2,您将获得正确的输出,就像输入的字符数大于3时,输入将不正确