c中的数组中的scanf char

时间:2017-08-06 17:35:51

标签: c arrays printf scanf

char name[2];

scanf("%c",name);

printf("%c",name);

嘿伙计们,我刚开始学习C.我对上面的代码感到好奇,我从printf输出得到的东西与我输入的字符不一样。相反,输出看起来很滑稽符号,有人可以向我解释一下吗? 感谢。

4 个答案:

答案 0 :(得分:4)

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

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

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

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

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

答案 1 :(得分:3)

读取单个字符

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

或读取字符串

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

答案 2 :(得分:0)

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

char name[2];

scanf(" %s", name);
printf("%s",name);

答案 3 :(得分:-2)

如果您输入的输入包含小于或等于2的字符,如果您的输入包含大于3的字符,那么您将得到正确的输出,然后它就不起作用