快速读写(fastio)与getchar()及putchar()

一、快读快写

在变写程序时,我们会发现:自带的 cin 、 cout 、 scanf 、 printf 有点慢,这时,我们就可以是用快读快写 

以long long类型为例,代码如下:

 1 //整数快读代码
 2 long long read() {
 3     long long x=0, f=1;
 4     char ch=getchar();
 5     while((ch<'0')||(ch>'9')) {
 6         if(ch=='-')f=-1; 
 7         ch=getchar();
 8     }
 9     while(ch>='0'&&ch<='9') {
10         x=(x<<1)+(x<<3)+ch-'0';//x<<1等价于x*2,x<<3等价于x*8。
11         ch=getchar();
12     }
13     return f*x;//f=-1时,表示读取的是负数
14 }
15 //可以这样使用
16 long long x;
17 x=read();
18 //整数快写代码
19 void write(long long x) {
20     if(x<0) putchar('-'),x=-x;
21     if(x>9) write(x/10);
22     putchar(x%10+'0');
23 }
24 //要输出一个整数 x,直接这样用:
25 write(x);

 

二、putchar()与getchar()

事实上,

以上快读快写,依赖的就是putchar()与getchar()

getchar()的用法:

(a)语法:
1 int getchar(void);
(b)返回值:

getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。

(c)作用:

从标准输入流只读取一个字符(包括空格、回车、tab),读到回车符('\n')时退出,键盘输入的字符都存到缓冲区内,一旦键入回车,getchar就进入缓冲区读取字符,一次只返回第一个字符作为getchar函数的值,如果有循环或足够多的getchar语句,就会依次读出缓冲区内的所有字符直到'\n'.要理解这一点,之所以你输入的一系列字符被依次读出来,是因为循环的作用使得反复利用getchar在缓冲区里读取字符,而不是getchar可以读取多个字符,事实上getchar每次只能读取一个字符.如果需要取消'\n'的影响,可以用getchar()来清除,如:while((c=getchar())!='\n'),这里getchar();只是取得了'\n'但是并没有赋给任何字符变量,所以不会有影响,相当于清除了这个字符。例:

1 #include<cstdio>
2 int main() {
3     char a,b;
4     a=getchar();
5     b=getchar();
6     putchar(a);
7     putchar(b);
8     return 0;
9 }
putchar()的用法:

(1)输出:putchar函数只能用于单个字符的输出,向终端输出一个字符,且一次只能输出一个字符。

(2)格式:对于变量来说,格式为:

putchar(ch);

 

对于常量来说,格式为

putchar('c');

 

对于转义字符来说,格式为:

putchar('\0');

 注:本篇转自作者的另一篇博客。

 

posted @ 2020-11-06 11:21  VegetableChick  阅读(289)  评论(0编辑  收藏  举报