printf函数族功能强大,语法简洁,速度快,也容易掌握。所以,与c++流风格的输出相比,更加受到程序员的青睐,在各种API上都可以看到它们的踪迹,因此,掌握printf函数族是非常重要的。
1 回答问题(有些可能比较难,尽所知道的回答。我们今后会专题讲解):
A) 列举你知道的printf族函数。
B) printf函数可以传递可变个参数,其他函数可以吗?尽你所知,予以说明。
C) vprintf函数的用途是什么?
D) _snprintf与sprintf函数的不同,你更倾向于使用哪个?
E) 下面的printf调用都多少有些问题,分析其后果:
int _i = 1;
int _j = 2;
int _k = 3;
printf("%d %d %d", _i, _j);
printf("%d %d", _i, _j, _k);
char _c = 1;
printf("%d", _c);
short _s = 1;
printf("%d", _s);
double _d = 3.0;
printf("%d", _d);
float _f = 3.0f ;
printf("%f", _f);
F) 从上面的问题代码,能否分析出规律,以及写代码的注意事项。
G) 上面的问题代码, 传统的c/c++编译器为什么没有警告呢?
2 完成下面程序:
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
int _i = 83543532;
printf(__________, _i);
printf(__________, _i);
printf(__________, _i);
printf(__________, _i);
__int64 _i64 = __int64(_i) * _i;
printf(__________, _i64);
printf(__________, _i64);
printf(__________, _i64);
printf("-----------+-----------+-----------+-----------+-----------+-----------+/n");
for (_i = 0; _i < 10; _i++)
{
printf(____________________,
rand() - 5000,
rand() - 5000,
rand() - 5000,
rand() - 5000);
}
return 0;
}
使得输出下面形式文本:
83543532
0x4fac5ec
0x4FAC5EC
0x04FAC5EC
6979521739035024
0x18CBD 689F 51190
0x0018CBD 689F 51190
-----------+-----------+-----------+-----------+-----------+-----------+
21500 1334 +0000013467 -4959
24358 6478 +0000010724 +14169
23145 705 +0000019464 +21962
-4509 4961 +0000011827 +18281
436 -173 +0000006942 -2005
-4847 -1098 +0000009604 +27391
13716 12421 +0000007382 -4708
16726 447 +0000014895 +14718
14912 -3131 +0000006538 +9771
4894 12035 +0000021299 +20667
以上问题,每个人尽量自己解决,经过思考后也可以互相讨论。答卷不用交。我们将在最近一次代码评审会上抽查、提问、讨论!