1.关于printf()的返回值问题
printf返回值的大小等于输出字符的个数,比如:
#include <stdio.h>
int main(void)
{
int a=1,b=2,x;
x=printf("%d%d",a,b);
printf("%d",x);
return 0;
}
结果为:122
#include <stdio.h>
int main(void)
{
int a=1,b=2,x;
x=printf("%d,%d\n",a,b);
printf("%d",x);
return0;
}
结果为:1,2
4
所以在统计输出字符时像,。\n \t \r之类的也需统计在内。
2.关于scanf()的返回值问题
返回值大小等于正确读入字符的个数,比如:
#include <stdio.h>
int main(void)
{
int a,b,c;
c=scanf("%d %d",&a,&b);
printf("%d",c);</span>
return 0;
}
如果输入1,2,则输出结果为:2</span>
如果输入1,a,则输出结果为:1</span>
如果输入a,a,则输出结果为:0</span>
3.关于注释问题
#include <stdio.h>
int main(void)
{
int a=3,x=3,y;
int *p=&a;
y=x/*p;
printf("%d",y);</span>
return 0;
}
乍一看程序觉得是没错的,会一口爆出结果为1,但是在vc里编译时会发现从/往后都被注释掉而且程序会报错,原因是系统会认为/*是一个注释符,将后面内容都注释掉。如果想要实现输出1的效果应该这样做:
#include <stdio.h>
int main(void)
{
int a=3,x=3,y;
int *p=&a;
y=x/(*p);
printf("%d",y);</span>
return 0;
}
4.a---b的结果
#include <stdio.h>
int main(void)
{
int a=3,b=2,y;
y=a---b;
printf("%d %d %d\n",y,a,b);
return 0;
}
系统会先读取a--,然后会与b进行减法运算,所以输出结果为1 2 2
5.函数的地址输出
#include <stdio.h>
f()
{
}
int main(void)
{
printf("%d\n",f);
return 0;
}
printf输出f()的地址。
6.sizeof的问题
#include <stdio.h>
int main(void)
{
printf("%d",sizeof('a'));
return 0;
}
输出结果为:4
原因是将后面内容转化为整型变量为4字节。
sizeof()不计算表达式,只看表达式类型。
再比如下面程序:
#include <stdio.h>
int main(void)
{
printf("%d",sizeof(2+3.14));
return 0;
}
输出结果为:8
因为3.14为double类型,所以转化为double输出结果为8
作者:李璐