专题3:输入与输出
在c++中,有许许多多的输入及输出方式,今天就来讨论一下c++的输入及输出
大家都应该知道c++的输入输出类型有
cin/cout
scanf/printf
getchar/putchar
gets/puts
我们就将其分为不同部分进行讨论
Part 1 c++ cin/cout 标准流
cin/cout输入输出方式简单且易懂,不用考虑输入的类型,作为初学者学习c++的初始工具,受到广泛的使用,其使用格式为
cin>>(你想要输入的变量名)(>>更多变量);
cout<<(你想要输出的变量名)(>>更多变量);或cout<<"你想要输出的字符”;(会直接输出)
当换行时,有<<endl<<;
他可以支持几乎所有数据变量类型,无论时 int , long long int , char , string(这个很重要)都可以完美支持
举例1 a+b problem
int a,b;
cin>>a>>b;
cout<<(a+b)<<endl;
举例2 判断a是否为偶数
int a;
cin>>a;
if(a%2==0)cout<<“a为偶数”<<endl;
else cout<<“a不是偶数”<<endl;
Part 2 scanf/printf
scanf/printf作为中高阶c++程序猿必备用品,虽然他需要指定变量的类型,但是!他快啊!他快啊!他快啊!
使用格式:
scanf("%x",&你要置换的变量名)//%x可以为
%d==int,%lld==long long int,%c=char/string
printf("%x",你要输出的变量名)//%x含义与上相同
或
printf("你要输出的字符");
当换行时,需在双引号内加上\n
提示:scanf/printf不支持string类型的输入
举例1:a+b problem
int a,b;
scanf("%d%d",&a,&b);
printf("%d",a+b);
举例2:a是否为偶数
int a;
scanf("%d",&a);
if(a%2==0)printf("a为偶数");
else printf("a不是偶数");
对于"&"号的说明:
当你在输入时,加上&意思为将你要指定变量的地址赋值,而你要指定变量的地址即为此地址
如果没有&,意思为将你要指定变量所代表的值的地址赋值,而你要指定变量的地址不在此地址
当你在输出时意义与此类似
这也是为什么要在输入时加&而在输出时不加
Part 3 getchar/putchar/gets/puts
由于这两种方式的特殊性,我们把它放在一起
getchar和putchar专用于单个字符的输入及输出,由于他会吃空格和回车(scanf %s不会),其受众面并不广,但在特殊情况下,他还是十分有用的
使用格式
你要输入的字符名=getchar();
putchar(你要输出的变量名);
举例1:输入一个字符,然后输出他
char c;
c=getchar();
putchar(c);
举例2:输入一句话,并存储他们
char a[100];
for(int i=1;;++i)
{
a[i]=getchar();
if(a[i]=='\n')break;
}
gets/puts专用于字符串的输入及输出,由于他会吃整个一行,其受众面也不广,即使如此,也有不少人在特殊情况下会使用它。
使用格式
gets(你要输入的字符串名);
puts(你要输出的字符串名);
举例1:如上面的举例2
char a[100];
gets(a);
Part 4 进阶专题 时间
上面我们提到过,scanf/printf要比cin/cout快,这种关系在普通的输入输出中表现不明显
cin/cout有一种优化方式ios::sync_with_stdio(false);其作用是去除cin/cout的缓存,使其速度加快
对于普通的输入输出来说
数据规模
test1 1000
test2 10000
test3 100000
test4 1000000
test5 10000000
cin cout improve:加优化
这样看来,cin/cout似乎比scanf/printf还快?这只是对于普通的的输入输出来说,而在图论方面,scanf/printf要比cin/cout甚至其优化要出色许多
接下来看洛谷P3374 【模板】树状数组1
以上三个图分别对应scanf/printf , cin/cout , cin/cout improve
这样的话,大家应该就能感受到scanf/printf的威力了
Part 5 输入优化
int readint()//带返回的函数
{
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
x=10*x+c-'0';
c=getchar();
}
return f*x;
}
void readdb(double &x)//引用
{
double y=0.1,f=1.0;
x=0;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-')
f=-1.0;
c=getchar();
}
while(c>='0'&&c<='9')
{
x=10*x+c-'0';
c=getchar();
}
c=getchar();
while(c>='0'&&c<='9')
{
x+=y*(c-'0');
y/=10;
c=getchar();
}
x=x*f;
}
利用函数及字符读入的快速性,我们利用这两个函数读入int 型和double 型变量
上一篇: 这一点 决定新站提高收录的速度
下一篇: 发布高质量外链有何意义 怎么做网站外链
推荐阅读
-
编写一个程序,输入一个整数以及要转换的进制,输出转换结果,结果以字符串方式输出,例如 输入10814 16,把10814转换为16进制的字符串“2A3E”,如果输入10814 2,则10814
-
adobe audition音频输入采样率与输出设备不匹配该怎么办?
-
Python学习笔记整理3之输入输出、python eval函数
-
神奇的shell命令行输入与输出功能介绍
-
Linux文本流和标准输入、标准输出、标准错误与重定向介绍
-
Python零基础入门学习之输入与输出
-
linux shell数据重定向(输入重定向与输出重定向)详细分析
-
Python3基础之输入和输出实例分析
-
MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射
-
python3.4控制用户输入与输出的方法