13、请问下面的程序输出什么?(假设:输入 Hello, World)
#include int main()
{
char dummy[80];
printf("Enter a string:\n");
scanf("%[^r]",dummy);
printf("%s\n",dummy);
return 0;
}
参考答案:本例的输出是"Hello, Wo",scanf中的"%[^r]"是从中作梗的东西。意思是遇到字符r就结束了。
14、下面的程序试图使用"位操作"来完成"乘5"的操作,不过这个程序中有个BUG,你知道是什么吗?
#include
#define PrintInt(expr)
printf("%s : %d\n",#expr,(expr))int FiveTimes(int a)
{
int t;
t = a《2 + a;
return t;} int main()
{
int a = 1, b = 2,c = 3;
PrintInt(FiveTimes(a));
PrintInt(FiveTimes(b));
PrintInt(FiveTimes(c));
return 0;
}
参考答案:本题的问题在于函数FiveTimes中的表达式"t = a《2 + a;",对于a《2这个位操作,优先级要比加法要低,所以这个表达式就成了"t = a 《 (2+a)",于是我们就得不到我们想要的值。该程序修正如下:
int FiveTimes(int a)
{
int t;
t = (a《2) + a;
return t;
}