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位 |
%0nd | 输出一个整数,如果不足n位,用0补齐直到够n位 |
%I64d | 代表超长整型long long |
%lld | 代表超长整型long long |
%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);
注意:要严格保证输入的数据与输入格式一致(空格除外)。不然数据不一定能读取到。多余的内容会自动忽略。
3.2.输出控制小数精度程序示例 完整版
scanf配合printf可以形成完整版的保留两位小数输出,如下:
#include<iostream>
#include<cstdio>//需要使用printf和scanf
//由于没有用到C++特性,所以可以不加命名空间
int main(){
double x;
scanf("Give 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。
5.课后作业
喜欢就订阅此专辑吧!
【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。
欢迎扫码关注蓝胖子编程教育