C
C语言
1. 格式化输出函数printf
:
printf("格式化控制字符串",arg1,arg2,…,argN);
格式化控制字符串包括两部分:格式字符串与非格式字符串(普通字符)。
对于格式字符串:以
%
号开头,用于定义每个数据的输出格式:符号 描述 d 以十进制形式输出 带 符号整数(正数不输出符号) ld 输出长整型数 o 以八进制形式输出 无 符号整数(不输出前缀0) x,X 以十六进制形式输出 无 符号整数(不输出前缀0x) u 以十进制形式输出 无 符号整数 f 以小数形式输出单、双精度实数 lf 按long double类型输出 e,E 以指数形式输出单、双精度实数 g,G 按数据精度以%f或%e中较短的输出宽度输出单、双精度实数 c 输出单个字符 s 输出字符串 比如:
printf("i= %f, d= %f\n",i,d);
的输出结果为:i=1, d=3.14(回车换行)
。整数的格式化输出:
% [对齐方式] [输出最小宽度] 整数类型
对齐方式用默认为右对齐,若为"-"负号,则为左对齐;输出最小宽度n,若实际位数小于n,则补以空格或0.
例如:%08d
,右对齐,不足宽度补0;%-8d
,左对齐,不足宽度补空。实数的格式化输出:
% [输出最小宽度] [ . 精度] 实数类型
C++
标准库定义了一组操纵符来修改流的格式状态,包括控制数值的输入与输出形式以及控制补白的数量和位置,大多数改变格式状态的操纵符是设置/复原成对的。当操纵符改变流的格式状态时,通常改变后的状态对所有后续IO都生效。
此处需注意对于double型实数,可以用
%f
格式用printf
函数输出,但是必须用%lf
格式用scanf
格式输入。C++
C++中对输入输出函数做的比较完善,因此不需要使用各种格式控制符,相对C来说简便许多。但是在
iostream
类库中提供了大量的格式化输入输出方法,流对象仍可以使用相应的成员函数或使用控制符设置格式,前提是你想要的话。常用I/O流控制符 描述 dec 转换整数的基数为十进制 oct 转换整数的基数为八进制 hex 转换整数的基数为十六进制 showbase 在输出中显示基数指示符 uppercase 十六进制输出时一律用大写字母 scientific 科学计数法显示浮点数 fixed 定点小数形式显示浮点数 showpoint 把带有小数点的浮点数值输入到流中 showpos 正整数前带有"+"号 unitbuf 输出操作后立即刷新流 left 输出数据在本域宽范围内左对齐 right 输出数据在本域宽范围内右对齐
控制布尔值的格式
默认情况下bool值打印为1或0,我们可以使用boolalpha操纵符使之输出true或false,使用noboolapha可以取消这种格式状态。对于输入流也同样生效,只有输入true才能使值变为true,输入1不行。
int main() { cout << true << endl;//1 cout << false << endl;//0
cout <span class="token operator"><<</span> boolalpha<span class="token punctuation">;</span> cout <span class="token operator"><<</span> true <span class="token operator"><<</span> endl<span class="token punctuation">;</span><span class="token comment">//true</span> cout <span class="token operator"><<</span> false <span class="token operator"><<</span> endl<span class="token punctuation">;</span><span class="token comment">//false</span> cout <span class="token operator"><<</span> noboolalpha<span class="token punctuation">;</span> cout <span class="token operator"><<</span> true <span class="token operator"><<</span> endl<span class="token punctuation">;</span><span class="token comment">//1</span> cout <span class="token operator"><<</span> false <span class="token operator"><<</span> endl<span class="token punctuation">;</span><span class="token comment">//0</span> bool value <span class="token operator">=</span> false<span class="token punctuation">;</span> cin <span class="token operator">>></span> boolalpha <span class="token operator">>></span> value<span class="token punctuation">;</span><span class="token comment">//输入true才打印1</span> cout <span class="token operator"><<</span> value <span class="token operator"><<</span> endl<span class="token punctuation">;</span> <span class="token function">system</span><span class="token punctuation">(</span><span class="token string">"pause"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
}
指定整型值的进制
默认情况下,整型值的输入输出使用十进制,我们可以使用操纵符hex,oct和dec将其改为十六进制,八进制,十进制。
int main() { cout << hex << 111 << endl;//6f cout << oct << 111 << endl;//157 cout << dec << 111 << endl;//111 system("pause"); }
输入十六进制后输出十进制。
int main() { int value = 100; cin >> hex>> value; cout << dec << value << endl; system("pause"); }
使用showbase可以显示进制,uppercase可以控制十六进制的x是否大写。
int main() { cout <<uppercase<< showbase;//在输出结果中显式进制,0x表示十六进制,0表示八进制 cout << hex << 111 << endl;//0X6f cout << nouppercase; cout << hex << 111 << endl;//0x6f cout << oct << 111 << endl;//0157 cout << dec << 111 << endl;//111
cout <span class="token operator"><<</span> noshowbase<span class="token punctuation">;</span> cout <span class="token operator"><<</span> hex <span class="token operator"><<</span> <span class="token number">111</span> <span class="token operator"><<</span> endl<span class="token punctuation">;</span><span class="token comment">//6f</span> cout <span class="token operator"><<</span> oct <span class="token operator"><<</span> <span class="token number">111</span> <span class="token operator"><<</span> endl<span class="token punctuation">;</span><span class="token comment">//157</span> cout <span class="token operator"><<</span> dec <span class="token operator"><<</span> <span class="token number">111</span> <span class="token operator"><<</span> endl<span class="token punctuation">;</span><span class="token comment">//111</span> <span class="token function">system</span><span class="token punctuation">(</span><span class="token string">"pause"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
}
控制浮点数格式
默认情况下,浮点数按六位数字精度打印,如果浮点数没有小数部分则不打印小数点,根据浮点数的值选择打印成定点十进制或科学记数法形式,标准库会选择一种可读性更好的格式:非常大和非常小的值打印为科学记数形式,其它值打印为定点十进制形式。
默认情况下,精度控制打印的数字的总数,浮点值按当前精度舍入而非截断,使用precision可以获取当前流的浮点数精度值以及设置流的浮点数精度值。
int main() { cout << cout.precision() << endl;//当前精度:6 cout << 3.14156789 << endl;//3.14157 cout.precision(2);//设置当前精度为2 cout << 3.14156789 << endl; //3.1 system("pause"); }
只有当浮点数包含小数部分时才显式小数点,我们可以通过showpoint始终显式小数点。
int main() { cout << 3.0 << endl;//3 cout << showpoint; cout << 3.0 << endl;//3.00000 cout << noshowpoint; system("pause"); }
通过使用恰当的操纵符,我们可以强制一个流使用科学记数法,十六进制记数法,定点十进制记数法,默认记数法。
int main() { cout << 3.14156789 << endl;//默认浮点数记数法 cout <<scientific<< 3.14156789 << endl;//科学记数法3.141568e+00 cout << uppercase << 3.14156789 << endl;//大写E的科学记数法3.141568e+00 cout << fixed << 3.14156789 << endl;//定点十进制3.141568 cout << hexfloat << 3.14156789 << endl;//十六进制记数法0X1.921EE5P+1 cout << defaultfloat<< 3.14156789 << endl;//默认浮点数记数法 system("pause"); }
输出空白
setw可以指定下一个输出的最小空间,如果不满则用空格填充,类似endl,setw不改变输出流的内部状态,它只决定下一个输出的大小。
setw默认使用右对齐格式,使用left和right可以修改对齐格式为左对齐和右对齐,使用internal修改对齐格式为符号左对齐,值右对齐。使用setfill可允许指定一个字符代替默认的空格来补白输出。
int main() { cout <<setw(16)<< -3.14156789 << endl; cout <<left<< setw(16) << -3.14156789 << endl; cout << right << setw(16) << -3.14156789 << endl; cout << internal << setw(16) << -3.14156789 << endl; cout << setfill('*') << endl; cout << left << setw(16) << -3.14156789 << endl; cout << right << setw(16) << -3.14156789 << endl; cout << internal << setw(16) << -3.14156789 << endl; system("pause"); }