欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

专题3:输入与输出

程序员文章站 2022-03-06 17:38:27
...

在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的缓存,使其速度加快

对于普通的输入输出来说

专题3:输入与输出专题3:输入与输出专题3:输入与输出

数据规模 

test1 1000

test2 10000

test3 100000

test4 1000000

test5 10000000

cin cout improve:加优化

这样看来,cin/cout似乎比scanf/printf还快?这只是对于普通的的输入输出来说,而在图论方面,scanf/printf要比cin/cout甚至其优化要出色许多

接下来看洛谷P3374 【模板】树状数组1

专题3:输入与输出专题3:输入与输出专题3:输入与输出

以上三个图分别对应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 型变量

相关标签: 测试