From edf8e1a70710afad18638f0878fa5eed477c52e6 Mon Sep 17 00:00:00 2001 From: Mosa-Linking <42469018+Mosa-Linking@users.noreply.github.com> Date: Sat, 18 Aug 2018 20:17:56 +0800 Subject: [PATCH] Update io.md --- docs/misc/io.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/misc/io.md b/docs/misc/io.md index f511ef12..c7bc5a63 100644 --- a/docs/misc/io.md +++ b/docs/misc/io.md @@ -48,6 +48,8 @@ scanf和printf依然有优化的空间,这就是本章所介绍的内容—— int read(){ + int x=0,w=1;char ch=0; + while(ch<'0' || ch>'9'){//ch不是数字时 if(ch=='-') w=-1;//判断是否为负 @@ -59,7 +61,6 @@ int read(){ while(ch>='0' && ch<='9') {//ch是数字时 x=(x<<3)+(x<<1)+ch-'0';//将新读入的数字’加’在x的后面 - //x<<3==x*8 x<<1==x*2 所以(x<<3)+(x<<1)相当于x*10 //x是int 类型,char类型的ch和’0’会被自动转为其ASCII表中序号,相当于将ch转化为对应数字 ch=getchar();//继续读入 @@ -86,11 +87,17 @@ int read(){ ```cpp int write(int x){ + if (x<0) {//判负+输出负号+变原数为正数 + x=-x; + putchar('-'); + } + if (x>9) write(x/10);//递归,将除最后一位外的其他部分放到递归中输出 + putchar(x%10+'0');//已经输出(递归)完x末位前的所有数字,输出末位 } ``` -- 2.11.0