跳到主要内容
C++ 单目操作符与标准输入输出详解 | 极客日志
C++ 算法
C++ 单目操作符与标准输入输出详解 综述由AI生成 C++ 中的单目操作符(自增自减、正负号)及其前置后置区别,并详细讲解了 C/C++ 标准输入输出函数 getchar、putchar、scanf 和 printf。内容包括函数原型、基本用法、占位符类型(如%d、%s)、格式化输出(宽度限制、小数位数控制)以及常见占位符列表。适合算法竞赛入门及 C++ 基础学习。
灰度发布 发布于 2026/3/28 更新于 2026/5/28 35 浏览单目操作符与标准输入输出
单目操作符
前面介绍的操作符都是双目操作符,即有 2 个操作数。除此之外还有一些操作符只有一个操作数,被称为单目操作符。如 ++、--、+(正)、-(负) 就是单目操作符。
8.1 ++ 和 --
++ 是一种自增的操作符,又分为前置 ++ 和后置 ++;-- 是一种自减的操作符,也分为前置 -- 和后置 --。
请一定注意:
前置 ++ 或者 后置 ++,都是让操作数自增 1 的
前置 -- 或者 后置 --,都是让操作数自减 1 的
8.1.1 前置 ++ 和 后置 ++
int x = 10 ;
int a = ++x;
cout << x << " " << a << endl;
int x = 10 ;
int a = x++;
cout << x << " " << a << endl;
小技巧:
前置 ++:先 +1,后使用
后置 ++:先使用,后 +1
8.1.2 前置 -- 和 后置 --
int y = 10 ;
int b = --y;
cout << y << " " << b << endl;
int y = 10 ;
int b = y--;
cout << y << " " << b << endl;
小技巧:
前置 --:先 -1,后使用
后置 --:先使用,后 -1
8.2 + 和 -
这里的 + 是正号,- 是负号,都是单目操作符。
运算符 + 对正负值没有影响,是一个完全可以省略的运算符,但是写了也不会报错。
int a = +10 ;
运算符 - 用来改变一个值的正负号,负数的前面加上 - 就会得到正数,正数的前面加上 - 会得到负数。
int a = ;
b = -a;
c = ;
cout << b << c << endl;
a = ;
b = -a;
cout << b << endl;
10
int
int
-10
int
-10
int
第 2 章 C/C++ 输入输出(上)
1. getchar 和 putchar getchar() 和 putchar() 是属于 C 语言的库函数,C++ 是兼容 C 语言的,所以 C++ 中只要正确包含头文件也可以正常使用这两个函数。
1.1 getchar() 函数原型如下:
int getchar(void);
getchar() 函数返回用户从键盘输入的一个字符,使用时不带有任何参数。
程序运行到这个命令就会暂停,等待用户从键盘输入,等同于使用 cin 或 scanf() 方法读取一个字符。
它的原型定义在头文件 <cstdio>。
#include <cstdio>
#include <iostream>
using namespace std;
int main () {
int ch;
ch = getchar ();
cout << ch << endl;
cout << (char )ch << endl;
return 0 ;
}
getchar() 不会忽略起始的空白字符,总是返回当前读取的第一个字符,无论是否为空格。
如果读取失败,返回常量 EOF,由于 EOF 通常是 -1,所以返回值的类型要设为 int,而不是 char。
如何让 getchar() 函数读取失败,返回 -1 呢?其实需要在输入字符之前,直接按 Ctrl+z 就可以。
#include <cstdio>
#include <iostream>
using namespace std;
int main () {
int ch;
ch = getchar ();
cout << ch << endl;
return 0 ;
}
getchar() 通常和 putchar() 是一对儿,配合使用的。
1.2 putchar() int putchar(int character);
putchar() 函数将它的参数字符输出到屏幕,它的原型定义在头文件 <cstdio>。
#include <cstdio>
int main () {
int ch = 0 ;
ch = getchar ();
putchar (ch);
return 0 ;
}
操作成功时,putchar() 返回输出的字符,否则返回常量 EOF。
小提示:
这里大家先学会这两个函数的使用,在后期算法课的模块,会学到快速读写,到时候就会用到这两个函数。
2. scanf 和 printf scanf() 和 printf() 是属于 C 语言的库函数,C++ 是兼容 C 语言的,所以 C++ 中只要正确包含头文件也可以正常使用这两个函数。而且这两个函数在算法竞赛题目中使用的非常频繁,尤其是在输出格式控制中,所以接下来我们这里认真学习一下。
2.1 printf printf() 函数原型如下:
int printf(const char * format, ...);
2.1.1 基本用法 printf() 的作用是将参数文本输出到屏幕。
它名字里面的 f 代表 format(格式化),表示可以定制输出文本的格式。
#include <cstdio>
int main () {
printf ("Hello World" );
return 0 ;
}
上面命令会在屏幕上输出一行文字'Hello World'。
printf() 不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。
为了让光标移到下一行的开头,可以在输出文本的结尾,添加一个换行符 \n。
如果文本内部有换行,也是通过插入换行符来实现,如下方代码:
#include <cstdio>
int main () {
printf ("Hello\nWorld\n" );
printf ("Hello\n" );
printf ("World\n" );
return 0 ;
}
2.1.2 占位符 printf() 可以在输出文本中指定占位符。
所谓'占位符',就是这个位置可以用其他值代入。
#include <cstdio>
int main () {
printf ("There are %d apples\n" , 3 );
return 0 ;
}
上面示例中,There are %d apples\n 是输出文本,里面的 %d 就是占位符,表示这个位置要用其他值来替换。占位符的第一个字符一律为百分号 %,第二个字符表示占位符的类型,%d 表示这里代入的值必须是一个整数。
printf() 的第二个参数就是替换占位符的值,上面的例子是整数 3 替换 %d。执行后的输出结果就是 There are 3 apples。
常用的占位符除了 %d,还有 %s 表示代入的是字符串。
#include <cstdio>
int main () {
printf ("%s will come tonight\n" , "zhangsan" );
return 0 ;
}
上面示例中,%s 表示代入的是一个字符串,所以 printf() 的第二个参数就必须是字符串,这个例子是 zhangsan。执行后的输出就是 zhangsan will come tonight。
#include <cstdio>
int main () {
printf ("%s says it is %d o'clock\n" , "lisi" , 21 );
return 0 ;
}
上面示例中,输出文本 %s says it is %d o'clock 有两个占位符,第一个是字符串占位符 %s,第二个是整数占位符 %d,分别对应 printf() 的第二个参数(lisi)和第三个参数(21)。执行后的输出就是 lisi says it is 21 o'clock。
printf() 参数与占位符是一一对应关系,如果有 n 个占位符,printf() 的参数就应该有 n + 1 个。如果参数个数少于对应的占位符,printf() 可能会输出内存中的任意值。
占位符 介绍 %d 十进制整数 %lld 十进制 long long int 类型 %f 小数(包含 float 类型和 double 类型) %Lf long double 类型浮点数 %c 字符 %s 字符串 %a 十六进制浮点数,字母输出为小写 %A 十六进制浮点数,字母输出为大写 %e 使用科学计数法的浮点数,指数部分的 e 为小写 %E 使用科学计数法的浮点数,指数部分的 E 为大写 %i 整数,基本等同于 %d %g 6 个有效数字的浮点数 %G 等同于 %g,唯一的区别是指数部分的 E 为大写 %hd 十进制 short int 类型 %ho 八进制 short int 类型 %hx 十六进制 short int 类型 %hu unsigned short int 类型 %ld 十进制 long int 类型 %lo 八进制 long int 类型 %lx 十六进制 long int 类型 %lu unsigned long int 类型 %llo 八进制 long long int 类型 %llx 十六进制 long long int 类型 %llu unsigned long long int 类型 %Le 科学计数法表示的 long double 类型浮点数 %n 已输出的字符串数量。该占位符本身不输出,只将值存储在指定变量之中 %o 八进制整数 %p 指针 %u 无符号整数(unsigned int) %x 十六进制整数 %zd size_t 类型 %% 输出一个百分号
2.1.3 格式化输出 #include <cstdio>
int main () {
printf ("%5d\n" , 123 );
return 0 ;
}
上面示例中,%5d 表示这个占位符的宽度至少为 5 位。如果不满 5 位,对应的值的前面会添加空格。
输出的值默认是右对齐,即输出内容前面会有空格;如果希望改成左对齐,在输出内容后面添加空格,可以在占位符的 % 的后面插入一个 - 号。
#include <cstdio>
int main () {
printf ("%-5d\n" , 123 );
return 0 ;
}
上面示例中,输出内容 123 的后面添加了空格。
对于小数,这个限定符会限制所有数字的最小显示宽度。
#include <cstdio>
int main () {
printf ("%12f\n" , 123.45 );
return 0 ;
}
上面示例中,%12f 表示输出的浮点数最少要占据 12 位。由于小数的默认显示精度是小数点后 6 位,所以 123.45 输出结果的头部会添加 2 个空格。
输出小数时,有时希望限定小数的位数。举例来说,希望小数点后面只保留两位,占位符可以写成 %.2f。
#include <cstdio>
int main () {
printf ("Number is %.2f\n" , 0.5 );
return 0 ;
}
上面示例中,如果希望小数点后面输出 3 位(0.500),占位符就要写成 %.3f。
这种写法可以与限定宽度占位符,结合使用。
#include <cstdio>
int main () {
printf ("%6.2f\n" , 0.5 );
return 0 ;
}
上面示例中,%6.2f 表示输出字符串最小宽度为 6,小数位数为 2。所以,输出字符串的头部有两个空格。
最小宽度和小数位数这两个限定值,都可以用 * 代替,通过 printf() 的参数传入。
#include <cstdio>
int main () {
printf ("%*.*f\n" , 6 , 2 , 0.5 );
return 0 ;
}
上面示例中,%*. *f 的两个星号通过 printf() 的两个参数 6 和 2 传入。
等同于 printf("%6.2f\n", 0.5);
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
Gemini 图片去水印 基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online