C++前身:C语言的输入输出——printf和scanf的使用和转义字符
1.转义字符
在C和C++中,有这样一类字符。它们都是由反斜杠/加字母组成,而且每一个都拥有特定功能。有的能输出换行,有的能控制输出的浮点数精度。它们就是转义字符。
转义字符 | 作用 | ASCII码值 |
---|---|---|
\a | 表示响铃(BEL) | 007 |
\b | 表示退格(BS),将当前位置移到前一页 | 008 |
\f | 表示换页(FF),将当前位置移到下页开头 | 012 |
\n | 表示换行(LF),将当前位置移到下一行开头 | 010 |
\r | 表示回车(CR),将当前位置移到本行开头 | 013 |
\t | 表示水平制表(HT)(跳到下一个TAB位置) | 009 |
\v | 表示垂直制表(VT) | 011 |
\\ | 表示输出字符 \ | 092 |
\' | 表示输出字符 ’ | 039 |
\" | 表示输出字符 " | 034 |
\? | 表示输出字符 ? | 063 |
\0 | 表示空字符(NULL),输出空格 | 000 |
\ddd | 表示1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 表示十六进制所代表的任意字符 | 十六进制 |
每一个转义字符的存在都是有它自己的意义的。这里我们先不要管其他的转义字符。只需要重点关注'\n'
的作用是换行就可以了。
注意:转义字符也是字符,也需要用’'括起来。
2.printf介绍
2.1.printf基本语法
printf实际上就是print format的缩写。意为格式化输出。基本语法如下:
printf(“%占位符1输出内容%占位符2…%占位符n”,变量名1,变量名2,…变量名n);
占位符,顾名思义,就是为后面的变量“占个位置”的符号。在输出的时候,占位符会依次匹配后面的变量输出。例如:
printf("I am %d years old.\nAnd I am %.2lf m high.",old,high);
当old=16,high=1.6时的输出效果:
I am 16 years old.
And I am 1.60 m high.
2.2.占位符表
现在还不知道这些占位符的意义也别急。看看下面的占位符表吧。
占位符 | 作用 |
---|---|
%d | 代表整数类型int |
%nd | 输出一个整数,如果不足n位,用空格补齐直到够n位(右对齐) |
%-nd | 输出一个整数,如果不足n位,在这个数后面用空格补齐直到够n位(左对齐) |
%0nd | 输出一个整数,如果不足n位,用0补齐直到够n位 |
%I64d | 代表超长整型long long( L i n u x Linux Linux) |
%lld | 代表超长整型long long( W i n d o w s Windows Windows) |
%f | 代表单精度类型float |
%lf | 代表双精度类型double |
%.nlf | 用于输出一个固定n位的浮点小数,四舍五入 |
%x.nlf | 用于输出一个宽度为x的固定n位的浮点小数 |
%c | 代表字符类型char |
%e | 代表以科学计数法的形式输出一个数 |
%s | 代表字符串类型string |
%p | 代表指针类型* |
%zd | 代表变量大小sizeof() |
对于这些常用占位符,不懂的也没关系,后面会慢慢讲解。主要要记下%d,%lf,%.nlf,%c和%s就差不多了。
2.3.使用printf的注意事项
使用printf
和scanf
均需要包含头文件cstdio。
在printf
的字符串里,转义字符保持它原有的作用。比如\n
会输出换行。
超长整形占位符一般使用%lld
。
2.4.输出控制小数精度程序示例
还记得我们之前输出控制小数精度的方法吗?又是fixed
又是set
什么什么,太麻烦了。在这里我们就可以使用printf
更简单地控制小数精度。比如将一个数保留两位小数输出可以这么写:
#include<iostream>
#include<cstdio>//需要使用printf
using namespace std;
int main(){
double x;
cin>>x;
printf("%.2lf\n",x);//保留两位小数并输出换行
return 0;
}
输入3.459
,输出3.46
。
3.scanf介绍
3.1.scanf基本语法
和printf一样,scanf
也是scan format
的缩写,直译为格式化扫描,也可以叫它格式化输入。基本语法如下:
scanf(“%占位符1 %占位符2…%占位符n”,&变量名1,&变量名2…&变量名n);
和printf
不同的是,scanf
要在每个变量名前加上一个&取址符。目前先不要管为什么,后面会讲。
一般来说,scanf
的字符串里只有占位符。但有的时候也会添加其他字符提示输入,比如:
scanf("I am %d years old.And I am %lf m high.",&old,&high);
注意:要严格保证输入的数据与输入格式一致(空格除外)。不然数据不一定能读取到。多余的内容会自动忽略。
小知识:scanf
会自动返回成功读取的变量的个数,可以将这个数赋值给一个变量,比如:int n=scanf("%d %lf",&x,&y)
。
3.2.输出控制小数精度程序示例 完整版
scanf
配合printf
可以形成完整版的保留两位小数输出,如下:
#include<iostream>
#include<cstdio>//需要使用printf和scanf
//由于没有用到C++特性,所以可以不加命名空间
int main(){
double x;
scanf("Get a number %lf",&x);//格式化输入,前面的提示语可以省略成:scanf("%lf",&x);
printf("%.2lf\n",x);//保留两位小数并输出换行
return 0;
}
4.C语言风格和C++风格输入输出的区别
4.1.C语言风格和C++风格输入输出的区别
C语言风格和C++风格输入最大的区别就是时间量级不同。特别是读入百万级的数据,如果说C语言的输入是大气层,那C++的输入就是地心层。所以当读入很多数据时,尽量使用scanf,这样才能保证在一秒内读完数据。
C语言风格的输出和C++风格的输出最大的区别就是简便性。当你要实现类似这样的功能时:
格式化输出一个人的年龄,体重,身高,期末考成绩。
比如:
16,1.66m,50kg,98.
C++风格的输出就要这样写:
cout<<age<<","<<high<<"m,"<<weight<<"kg,"<<score<<"."<<endl;
而C语言风格的输出只要这样写:
printf("%d,%.2lfm,%dkg,%d.\n",age,high,weight,score);
当然,无论是使用C语言风格还是C++风格的输入输出,都要依具体情况而定。如果输入的量级过大就使用scanf,否则使用cin。如果需要格式化字符串或者控制输出小数精度就使用printf,否则使用cout。
扩展:可以使用ios::sync_with_stdio(false);
加速cin
和cout
。因为C++中,cin
和cout
要与stdio同步,中间会有一个缓冲,所以导致cin
,cout
语句输入输出缓慢,这时就可以用这个语句,取消cin
,cout
与stdio的同步,说白了就是提速,效率基本与scanf
和printf
一致。但是由于关闭了与stdio的同步,导致了接下来scanf
和printf
就不可以使用了。示例如下:
#include<iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int a;
cin>>a;
cout<<a+1;
/*
scanf("%d",&a);
printf("%d",a+1);
*/
return 0;
}
5.课后作业
喜欢就订阅此专辑吧!
【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。
欢迎扫码关注蓝胖子编程教育