首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

初学者求解释

2012-05-28 
菜鸟求解释#includestdio.hint main(){char a,bscanf(%2c%3c,&a,&b)//输入xyzefghprintf(%c%c,a,b

菜鸟求解释
#include"stdio.h"
int main()
{
  char a,b;
  scanf("%2c%3c",&a,&b);//输入xyzefgh
  printf("%c%c",a,b);
}
输入xyzefgh,输出结果却是ez菜鸟不懂啊

[解决办法]
"%nc" 这个格式控制是用来做字符数组输入用的。只不过与"%s"不同,"%c"不跳过空白而且末尾不自动添加'\0'。
scanf("%2c%3c",&a,&b);
的结果是不止a b 被刷新了,甚至波及到了周围的内存空间了,还好 只是写了 "%3c",如果数字写大点估计程序就崩掉了。
[解决办法]
字符(是字符不是整型)a,b在内存中的顺序为:先读取b,再读取a
所以在输入xyzefgh时,计算机取值是先取b的值,即e,接着再“%2c”即z;
再解释下:scanf里面附加字符,如果是正整数,表示指定输入数据所占的列数,即域宽
[解决办法]
scanf()函数的一般格式为:scanf("格式字符串",输入项首地址表)
 
scanf的格式控制的一般形式为:%[*][宽度][F|N][h|l]类型字符
 ?[]中的控制字符为可选项
?"*"表示该输入项读入后不赋予任何变量,即跳过该输入值。这在减小内存开支上面还是有一点用处的,不需要的字符直接跳过,免得申请没用的变量空间
?"宽度"表示输入读入字符的长度,对于整型表示截取相应宽度的数字赋给后面列表中的相应变量;对于字符型表示读入相应长度的字符后把第一个字符赋给相应的变量,其余的自动舍弃。例如scanf("%2d%3d",&a, &b);如果输入为12345则将12赋给a,将45赋给b;scanf("%2c%3c",&a, &b);如果输入为12345则将'1'赋给a,将'3'赋给b
?F 、N、h、l分别表示远指针、近指针、短整和长整型,对于_int64相应的控制字符为ll或I64
?"类型字符"为 d -- 输入十进制整数 、o -- 输入八进制整数 、x -- 输入十六进制整数 、u -- 输入无符号十进制整数 f或e -- 输入实型数(用小数形式或指数形式) 、c -- 输入单个字符 、s -- 输入字符串 

热点排行