1.4 输入输出

C用于输入输出的函数有2组,分别为字符输入输出(getchar,putchar),格式化输入输出(scanf,printf)。
C++则多一组流输入输出(cin,cout)。
stdio.h是C的标准I/O库,是以函数的方式向buffer(缓冲区)写入或读取字符。
iostream是C++的标准I/O库,引入了输入/输出流的概念,是一个类库,是以类方法从streambuf中读取,写入字符。

一、单个字符输入输出

调用库(C++)或<stdio.h>(C语言)

(一)getchar()

用于输入字符,常为把输入的字符赋予一个字符变量。
一个getchar()只能接受一个字符,输入多个也按照单个处理;唯一可以接受空格和回车的输入;其等待用户的输入,可用于暂停程序直到按下回车键。没有参数,函数值为从输入设备接受的字符。
若有不止一个getchar(),应在一次性输入所有字符之后再按回车,否则回车会被当做字符读入。

(二)putchar()

作用是输出单个字符。

二者格式如下。

#include<cstdio>
using namespace std;
int main(){
 char ch;//定义字符变量ch,未赋值
 char c='B';//定义字符c,赋值为字符'B'
 ch=getchar();//输入ch
 putchar(c);//输出c
 putchar(ch);//输出ch
 putchar('\x42');//用转义字符输出字符'B'
 putchar(0x42);//16进制ASCII码输出字符'B'
 putchar(66);//10进制ASCII码输出字符'B'
}

实例:大小写英文字母转换,并输出转换后字母的ASCII码值

#include<stdio.h>
char ch;
int main(){
	ch=getchar();
	ch+=32;
	putchar(ch);
	return 0;
}
		/*Input:B
		Output:b
		*/

二、scanf和printf

调用库或<stdio.h>

高能预警。
这是一对敲字最慢但是程序效果最好的输入输出。
格式控制符必须用双引号""括起来,普通字符是输出时原样输出的字符。
\n’是换行符,用于换行,可添加在格式控制符之后。

scanf格式
scanf(格式控制字符串, 地址表列);
  scanf("%d,%f",    &a, &b);
  //非格式字符输入数据以,分隔,也可以是空格、Tab、回车

printf中,格式符之间可添加字符串。

#include<cstdio>
using namespace std;
int a,b,c,d,e;
char f,g,h,i;
long long j;
short k;
int l,m,n,o;
int main(){
 //以下代码仅展示格式符使用方式,后半部分scanf和printf使用的长得一样的格式符并非完全对应。
 scanf("%d",&a);//%d用于int型变量的输入,&表示“取地址”。
 scanf("%i",&b);//同上
 scanf("%u",&c);//u用于无符号十进制形式输入十进制整数
 scanf("%o",&d);//o用于输入八进制整数
 scanf("%x",&e);//x用于输入十六进制整数
 scanf("%c",&f);//c用于输入单个字符
 scanf("%s",&g);//s用于输入字符串(非空格开始,空格结束。字符串变量以'\0'结尾
 scanf("%f",&h);//f用于输入实数。
 scanf("%e",&i);//同上
 //以下为附加格式符
 scanf("%ld",&j);//长整型数("%ld" "%lo" "%lx"),double型数("%lf" "%le")
 scanf("%hd",&k);//h用于短整型数("%hd" "%ho" "%hx")
 scanf("%*d%d%d",&l,&m);//*表示对应的输入不赋给变量
 scanf("%3d",&n,&o);//加在这里的整数表示控制域宽
 //开始输出。
 printf("%d\n",&a);//d与i都是以带符号形式输出十进制整数,整数的正号省略。
 printf("%i\n",&b);
 printf("%u\n",&c);//u用于无符号十进制形式输出十进制整数
 printf("%o\n",&d);//o用于输出八进制整数,不输出前导符0
 printf("%x\n",&e);//x(或者X)用于输出十六进制整数,不输出前导符0x
 printf("%c\n",&f);//c用于输出单个字符
 printf("%s\n",&g);//s用于输出字符串
 printf("%f\n",&h);//f用于小数形式输出单双精度,隐含6位小数,四舍五入。
 printf("%e\n",&i);//e或E用于指数形式输出单双精度,隐含六位小数。
 //以下为附加格式符
 printf("%g\n",&j);//g或G输出时小数尾数没有多余的0
    return 0;
}

C语言中printf(),scanf()函数的转换说明表(%百分号加字母),修饰符表和标记表
s针对的是C++中字符串类型。
在这里插入图片描述
实例:大小写英文字母转换,并输出转换后字母的ASCII码值

#include<stdio.h>
char ch;
int main(){
	ch=getchar();
	ch+=32;
	printf("%c","%d\n",ch,ch);
	return 0;
}
		/*Input:B
		Output:b,98
		*/

常见错误

scanf("%d,%f\n",&a,&b);
scanf("%d,%f",a,b);
scnaf("%7.2f",&a);

三、流输入输出(C++)

调用库

(一)cin

自动识别变量类型。
格式如下:
cin>>变量;
cin>>变量1>>变量2>>变量3…;

(二)cout

格式为:
cout<<表达式;
cout<<表达式1<<表达式2<<表达式3…;
cout是不会自动换行的,必须手动输入换行符实现换行,有两种(目前不需要明确二者区别):
cout<<a<<‘\n’;
cout<<a<<endl;
endl稍慢,不过数据较小时不影响。
*注意:*数据规模达到10w时,cin和cout会跑不动。
输入时数据间用一个空格或回车分开。
浮点数控制小数点后位数:

#include<iostream>
#include<iomanip>//控制位数函数需要调用的库
using namespace std;
int main(){
 double a;
 cin>>a;
 cout<<fixed<<setprecision(3)<<a;//格式如上,数字表示要保留的小数点数位数
 return 0;
}

说明

  1. 注意库的调用
  2. cin,cout属于C++的概念,调用时涉及输入输出流;scanf和printf属于C语言的概念,是C语言的标准输入/ 输出库的函数,所以在时效上,scanf和printf优于cin和cout。对于大数据的输入输出,通常情况下应该用后者。
  3. 对于普通数据的输入输出,cin和cout比较方便,而在格式化方面,scanf和printf比较容易,cin效率比scanf低很多,尤其输入数据达到20w以上时非常明显,达到100w时cin输入就会超时。
  4. scanf和printf也有缺点,cin和cout能自动识别变量的数据类型,输入输出时不需要指定数据类型,前者不能,需要指定。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

延7488

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值