printf
其实是 C 语言提供的函数。大多数情况下,它的速度比 cout
更快,并且能够方便地控制输出格式
注意:cout
与 printf
的实际速度差会随编译器和操作系统的不同发生一定的改变。如果想要进行详细对比,请以实际测试结果为准。
#include <iostream>
using namespace std;
int main ()
{
printf("%d",1);
return 0;
}
输出数字1
#include <iostream>
using namespace std;
int main ()
{
printf("%d\n%d",1,2);
return 0;
}
输出数字1后换行再输出2
其中,%d
表示读入/输出的变量是一个有符号整型(int
型)的变量。
类似地:
%s
表示字符串。%c
表示字符。%lf
表示双精度浮点数 (double
)。%lld
表示长整型 (long long
)。根据系统不同,也可能是%I64d
。%u
表示无符号整型 (unsigned int
)。%llu
表示无符号长整型 (unsigned long long
),也可能是%I64u
。
这些现在只需了解即可之后才会学到
除了类型标识符以外,还有一些控制格式的方式。许多都不常用,选取两个常用的列举如下:
%1d
表示长度为 1 的整型。在读入时,即使没有空格也可以逐位读入数字。在输出时,若指定的长度大于数字的位数,就会在数字前用空格填充。若指定的长度小于数字的位数,就没有效果。%.6lf
,用于输出,保留六位小数。
这两种运算符的相应地方都可以填入其他数字,例如 %.3lf
表示保留三位小数。
什么是双精度浮点数,长整型等
这些表示变量的类型,会留到 变量 中统一讲解。
什么是/n?
\n
是一种 转义字符,表示换行。
转义字符用来表示一些无法直接输入的字符,如由于字符串字面量中无法换行而无法直接输入的换行符,由于有特殊含义而无法输入的引号,由于表示转义字符而无法输入的反斜杠。
常用的转义字符有:
\t
表示制表符。\\
表示\
。\"
表示"
。\0
表示空字符,用来表示 C 风格字符串的结尾。\r
表示回车。Linux 中换行符为\n
,Windows 中换行符为\r\n
。在 OI 中,如果输出需要换行,使用\n
即可。但读入时,如果使用逐字符读入,可能会由于换行符造成一些问题,需要注意。例如,gets
将\n
作为字符串结尾,这时候如果换行符是\r\n
,\r
就会留在字符串结尾。- 特殊地,
%%
表示%
,只能用在printf
或scanf
中,在其他字符串字面量中只需要简单使用%
就好了。
什么字符面?
「字面量」是在代码里直接作为一个值的程序段,例如 3
就是一个 int
字面量,'c'
就是一个 char 字面量。我们上面写的程序中的 "hello world"
也是一个字符串字面量。
不加解释、毫无来由的字面量又被称为「魔术数」(magic number),如果代码需要被人阅读的话,这是一种十分不被推荐的行为。
以上不做要求
拓展:
C++ 中的空白字符
在 C++ 中,所有空白字符(空格、制表符、换行),多个或是单个,都被视作是一样的。(当然,引号中视作字符串的一部分的不算。)
因此,你可以自由地使用任何代码风格(除了行内注释、字符串字面量与预处理命令必须在单行内),例如:
#include <iostream>
using namespace
std;
int
main(){
int/**/x, y; cin
>> x >>y;
cout <<
y << endl
<< x
;
return 0; }
当然,这么做是不被推荐的。
一种也被广泛使用但与 OI Wiki 要求的码风不同的代码风格:
#include <iostream>
using namespace std;
int main()
{
int x, y;
cin >> x >> y;
cout << y << endl << x;
return 0;
}
这样看起来是不是舒服很多呢?