战前准备03-字符输入输出

字符的输入

getchar()

features:

  • 输入一个字符,并以回车键提交
  • 可以接收空格、tab、回车
  • 当输入 a[回车] 时,getchar()接受‘a’,但会把[回车]符留在缓冲区。

example1

code:
#include<iostream>
using namespace std;
int main(){
	char ch;
	int i=1;
	while(ch = getchar()){
		cout<<i<<":"<<(int)ch<<endl; 
		++i;
	} 
	return 0;
}
input:
  • (空格)abc(制表符tab)d(回车)
output:
  • 1:32
    1:97
    1:98
    1:99
    1:9
    1:100
    1:10
    在这里插入图片描述

scanf()

feature:

  • scanf("%c",&ch)可以接收空格、tab、回车
  • 有两种使用方法,方法一 scanf("%c%c",&a,&b) 和 方法二 scanf(" %c %c",&a,&b)。
  • 方法一scanf会将键盘录入的任何一个键入都作为录入,多余的部分留在缓冲区。
  • 方法二跟scanf输入数值类型的情况相同,scanf从第一个 非空格/回车/tab 字符开始录入。

example1(方法一易错点):

problem description:

输入一个数字n,接下来输入n组数据,每组两个字符,每输入一组数据则输出这组数据,每组输出占一行

wrong code:
#include<iostream>
using namespace std;
int main(){
	int n;
	char a,b;
	scanf("%d",&n);
	while(n>0){
		scanf("%c%c",&a,&b);
		printf("%c%c\n",a,b);
		--n;
	}
	return 0;
}
input:
  • 4
    ab
    cd
    ef
output(including input content):
  • 在这里插入图片描述
cause of error:
  • scanf("%d",&n);中,我们输入了4[回车],其中4被读取,[回车]还留在缓存区中
  • 在随后的scanf("%c%c",&a,&b);中,[回车]赋予了a,字符‘a’赋予了b
the way to solve the problem:
method 1:
  • use scanf(" %c %c",&a,&b); to replace scanf("%c%c",&a,&b);
method 2:
  • insert getchar() under every scanf()
#include<iostream>
using namespace std;
int main(){
   int n;
   char a,b;
   scanf("%d",&n);
   getchar();
   while(n>0){
   	scanf("%c%c",&a,&b);
   	getchar();
   	printf("%c%c\n",a,b);
   	--n;
   }
   return 0;
}

cin(C++):

feature:

  • 当从缓冲区取出空格符、回车符、制表符tab会自动舍弃
  • cin>>a;
    scanf("%c",&b);
    这时输入a[回车],‘a’会赋予a,[回车]仍会赋予b

字符的输出

putchar()

printf()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值