C语言中printf中为什么输出的结果*位置很奇怪?望解答!
因为你的控制台的字体不是等宽的,空格的宽度大,星号的宽度小
接下来我们可以使用if或者switch对接收到的不同的命令作出不同的处理
但我个人更加倾向于使用switch,代码简洁明了
switch (*begin) {//这里的begin就是将指针移到%或者%#后的字符,我们只需要判断他是c(%c)还是d(%d)还是s(%d)等等
case 'c':
my_putchar(va_arg(arg, int));
break;
case 'd': case 'i':
//va_arg:arg指向变参数列表中的下一个参数,返回arg指向的参数值,是一个类型为int的表达式。
my_put_nbr(va_arg(arg, int));
break;
case 's':
my_putstr(va_arg(arg, char*));//va_arg返回char*表达式
break;
case 'f':
get_float(va_arg(arg, double));
break;
default:
normal_situ(begin,arg);
break;
//我个人有个格式“洁癖”。。就是一段function我不会写超过20行。。所以default是连接着另一个switch。
}
完整代码链接点这里,麻烦要下载的大家,顺手给我点一个star
如果有讲的不清楚的地方,大家可以在下方评论留言,完整代码中附带所有我自己写的基础的函数,例如:
putchar
putnbr
putstr
strlen
pow
还有十进制转二进制,转十六进制等等
希望文章能帮到大家