关于c++输入的那些事(有一种比快读还要快的超级快读)

关于c++输入的那些事

一、scanf输入

头文件需要

#include<cstdio>//普通头文件
#include<bits/stdc++.h>//或者用万能头文件

1.整型(int)

整型(int)需要用到标识符“%d”,而且需要在变量前加上取址符&

样例代码1

#include<cstdio>
int a,b;
int main(){
    scanf("%d",&a);
    scanf("%d",&b);
}

样例代码2

#include<cstdio>
int a,b;
int main(){
    scanf("%d%d",&a,&b);
}

2.长整型(long long)

长整型(long long)需要用到标识符“%lld”,而且需要在变量前加上取址符&

样例代码1

#include<cstdio>
long long a,b;
int main(){
    scanf("%lld",&a);
    scanf("%lld",&b);
}

样例代码2

#include<cstdio>
long long a,b;
int main(){
    scanf("%lld%lld",&a,&b);
}

3.无符号长整型(unsigned long long)

无符号长整型(unsigned long long)需要用到标识符“%llu”,而且需要在变量前加上取址符&

样例代码1

#include<cstdio>
unsigned long long a,b;
int main(){
    scanf("%llu",&a);
    scanf("%llu",&b);
}

样例代码2

#include<cstdio>
unsigned long long a,b;
int main(){
    scanf("%llu%llu",&a,&b);
}

4.双精度浮点类型(double)

双精度浮点类型(double)需要用到标识符“%lf”,而且需要在变量前加上取址符&

样例代码1

#include<cstdio>
double a,b;
int main(){
    scanf("%lf",&a);
    scanf("%lf",&b);
}

样例代码2

#include<cstdio>
double a,b;
int main(){
    scanf("%lf%lf",&a,&b);
}

5.字符类型(char)

字符类型(char)需要用到标识符“%c”,而且需要在变量前加上取址符&

样例代码1

#include<cstdio>
char a,b;
int main(){
    scanf("%c",&a);
    scanf("%c",&b);
}

样例代码2

#include<cstdio>
char a,b;
int main(){
    scanf("%c%c",&a,&b);
}

6.字符串(char[])

字符串(char[])需要用到标识符“%s”,不需要在数组名前加取址符,默认从数组下标为0的开始读入,可以在数组名后加‘+数字‘改变开始读入的位置

用scanf读入字符串会读到第一个空格或者换行停下

样例代码1

#include<cstdio>
char a[105];
int main(){
    scanf("%s",a);//默认从数组下标为0的开始读入
}

样例代码2

#include<cstdio>
char a[105];
int main(){
    scanf("%s",a+1);//从数组下标为1的开始读入
}

二、cin输入

头文件需要

#include<iostream>//普通头文件
using namespace std;
#include<bits/stdc++.h>//或者用万能头文件
using namespace std;

cin输入不需要考虑变量类型,但是输入效率没有scanf高

样例代码1

#include<iostream>
using namespace std;
int a;long long b;
int main(){
    cin>>a>>b;
}

样例代码2

#include<iostream>
using namespace std;
char a;unsigned long long b;
int main(){
    cin>>a>>b;
}

三、getchar输入

getchar输入只能输入字符类型(char),但是他的效率比scanf高

样例代码

#include<cstdio>
char a,b;
int main(){
    a=getchar();b=getchar();
}

四、gets输入

gets可以读入一行的字符串,遇到空格不会停

linux系统下用gets本地不能编译

样例代码

#include<cstdio>
char a[100005];
int main(){
    gets(a);
}

五、快速读入

在面对输入数据特别大的时候可以用快速读入增加代码的运行的速度

样例代码

int read(){
    int s=0,w=1,ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){s=s*10+(ch-'0');ch=getchar();}
    return s*w;
}

六、超级快读

最后再介绍一种比快读还要快的超级快读

namespace fasI{
    #define BF_SIZE 100000
    bool IOerr=0;
    inline char nc(){
        static char buf[BF_SIZE],*p1=buf+BF_SIZE,*pend=buf+BF_SIZE;
        if(p1==pend){
            p1=buf;
            pend=buf+fread(buf,1,BF_SIZE,stdin);
            if(pend==p1){IOerr=1;return -1;}
        }
        return *p1++;
    }
    inline bool bla(char ch){return ch==' '||ch=='\n'||ch=='\r'||ch=='\t';}
    inline void Rd(int &x){
        char ch;
        while(bla(ch=nc()));
        if(IOerr){return;}
        for(x=ch-'0';(ch=nc())>='0'&&ch<='9';x=x*10+ch-'0');
    }
    #undef BF_SIZE
};
posted @ 2022-09-14 19:04  白麟  阅读(339)  评论(12)    收藏  举报