关于c编程的一些很重要的问题

来源:互联网 发布:生产管理系统 源码 编辑:程序博客网 时间:2024/04/30 07:57

如果编码是utf8,那么printf("%-15.10s","hello,world");会输出“hello,worl”这里是英文标点
中文标点的话,printf("%-15.10s","hello,world");会输出"hello,wo",这里的,占了三个字符位,起初觉得很奇 怪,后来我朋友点醒我这是utf8,所以不符合ANSI C里那个中文占两字符位的规定,我这里用的编译器是linux下的gcc 4.3.2有兴趣的也可以去试试

下面这个函数在有些系统里会产生不正确的值
int factorial(int n)
{
if(n==0||n==1)return 1;
else return(n*factorial(--n));
}
这个函数产生的值依赖于系统,在有的系统里,递归函数会先计算n,再计算factorial(--n),目前在gcc和vc里都是先算 factorial(--n),再算n,于是导致n=3时输出2,n=4时输出6,该程序计算阶乘,所以要分析好这些细节,总体来说,这个方法是不对的, 要尽可能考虑到编译器的问题

如果要输出十进制,八进制,十六进制的话,只要printf("%d,%o,%x",19,19,19);就可以了,但是输出需要前缀的话,需要用printf("%#x %#o",19,19);来输出

原创粉丝点击