首页 > 代码库 > C puzzles详解【31-33题】
C puzzles详解【31-33题】
第三十一题
The following is a simple C program to read and print an integer. But it is not working properly. What is(are) the mistake(s)? #include <stdio.h> int main() { int n; printf("Enter a number:\n"); scanf("%d\n",n); printf("You entered %d \n",n); return 0; }
题目讲解:
运行后发生段错。
问题出在这一行
scanf("%d\n",n);
首先,scanf的第二个参数应该是个地址。若是从标准输入读入数据到变量n中,这一行应该改成
scanf("%d\n",&n);
再次编译运行,发现要输入一个数值后回车,程序并不会返回,再次输入一个数值后才会返回,n的值是第一次输入的值。
参考http://book.51cto.com/art/200901/106938.htm
‘\n’在scanf格式中不表示等待换行符,而是读取并放弃连续的空白字符,因此“%d\n”中的’\n’会让scanf读到非空白字符为止。要使用户输入一个数据回车后程序立马返回,去掉scanf中的’\n’即可。
即
scanf("%d",&n);
第三十二题
The following is a simple C program which tries to multiply an integer by 5 using the bitwise operations. But it doesn‘t do so. Explain the reason for the wrong behaviour of the program. #include <stdio.h> #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;
‘+’的优先级高于’<<’,应改成
t = (a<<2) + a;
第三十三题
Is the following a valid C program? #include <stdio.h> #define PrintInt(expr) printf("%s : %d\n",#expr,(expr)) int max(int x, int y) { (x > y) ? return x : return y; } int main() { int a = 10, b = 20; PrintInt(a); PrintInt(b); PrintInt(max(a,b)); }
题目讲解:
编译有错误:
test.c: In function ‘max’test.c:5: error: expected expression before ‘return’
将
(x > y) ? return x : return y;
改成
return (x > y) ? x : y;
C puzzles详解【31-33题】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。