输入

写在最前:开学已经有一个月了,还没好好开始学C++,now学渣的我要努力了。
先从最基础的输入输出学起。
注意:
1.>> 是会过滤掉不可见字符(如 空格 回车,TAB 等),如果不想略过空白字符,那就使用 noskipws 流控制【如:cin>>noskipws>>input[j];】
2.endl是换行,类似于C的‘\n’
1.cin的输入原理:
与scanf函数一样,程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的:当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入。当遇到EnterSpaceTab键时输入结束。
2.常用的几个函数
(cin是最基础的函数)
1.cin.get(数组名,长度,结束符)或cin.get(变量名)
特点:可自定义输入长度,结束符(若不标明则为Enter
读取字符时,cin.get(char ch)与ch=cin.get()等价。
上代码
用法一:接收字符
#include <iostream>
using namespace std;
int main()
{
char c1, c2;
cin.get(c1);
cin.get(c2);
cout<<c1<<" "<<c2<<endl; // 打印两个字符
cout<<(int)c1<<" "<<(int)c2<<endl; // 打印这两个字符的ASCII值
return 0;
}

案例一输入
a[Enter]
案例一输出
a
97 10
分析:只执行了一次从键盘输入,显然第一个字符变量取的’a’, 第二个变量取的是Enter(ASCII值为10),这是因为该函数不丢弃上次输入结束时的Enter字符,所以第一次输入结束时缓冲区中残留的是上次输入结束时的Enter字符!
案例二输入
a b[Enter]
案例二输出
a
97 32
分析:显然第一个字符变量取的’a’, 第二个变量取的是Space(ASCII值为32)。原因同上,没有丢弃Space字符。
用法二:用来接收一行字符串,并且可以接收空格,不需要包含#include“string”

#include <iostream> 
using namespace std; 
int main () 
{ 
char a[20]; 
cin.get(a,20); 
cout<<a<<endl;
return 0; 
}

输入案例一:jkl jkl jkl
输出案例一:jkl jkl jkl
输入案例二:abcdeabcdeabcdeabcdeabcde (输入25个字符)
输出案例二:abcdeabcdeabcdeabcd (接收19个字符+1个’\0’)
缺点:当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,下面的cin.getline()函数是在其基础上的升级,当输入超长时,会引起cin.getline()函数的错误,后面的cin操作将不再执行。
2.cin.getline(数组名,长度,结束符)
适用于多维数组, 同cin.get()类似,

#include<iostream> 
#include<string> 
using namespace std;

int main () 
{ 
char m[3][20]; 
for(int i=0;i<3;i++) 
{ 
cout<<"\n请输入第"<<i+1<<"个字符串:"<<endl; 
cin.getline(m[i],20); 
return 0;
}

cout<<endl; 
for(int j=0;j<3;j++) 
cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;

}

案例输入一
请输入第1个字符串:
kskr1

请输入第2个字符串:
kskr2

请输入第3个字符串:
kskr3
案例输出一
输出m[0]的值:kskr1
输出m[1]的值:kskr2
输出m[2]的值:kskr3
3.getline()
注意:
一:和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数,所以使用时需包含#include“string”
二:遇到以下情况发生会导致生成的此字符串结束。
1)到文件结束,
2)遇到函数的定界符,默认为回车
3)输入达到最大限度。
4.gets()
gets() 这个函数在标准输入输出头文件

#include<iostream> 
#include<stdio.h>
#include<string> 
using namespace std; 
int main () 
{ 
char m[20]; 
gets(m);                       //不能写成m=gets(); 
cout<<m<<endl; 
return 0;
}

PS:若你使用的是VS2015,则会报错,原因是VS2015使用的是新C标准,也就是C11,而VC6.0用的是老标准。
在新标准中,应该是用gets_s代替gets

输入案例一:jklj kljkl
输出案例一:jklj kljkl
用法二:类似cin.getline()里面的一个例子,gets()同样可以用在多维数组里面。
5.getchar()
用法一:接受一个字符,需包含#include”string”and#include”stdio.h”因为getchar()【gets()】是C语言的函数,C++也可以兼容,但是尽量不用或少用;

#include<iostream> 
#include<string> 
using namespace std; 
int main () 
{ 
char ch; 
ch=getchar(); //不能写成getchar(ch); 
cout<<ch<<endl; 
return 0;
}

输入案例一:husdhfd
输入案例一:h

本文参考自http://www.cnblogs.com/wanghao111/archive/2009/09/05/1560822.html
下一章学习输出,待续更新。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值