写在最前:开学已经有一个月了,还没好好开始学C++,now学渣的我要努力了。
先从最基础的输入输出学起。
注意:
1.>> 是会过滤掉不可见字符(如 空格 回车,TAB 等),如果不想略过空白字符,那就使用 noskipws 流控制【如:cin>>noskipws>>input[j];】
2.endl是换行,类似于C的‘\n’
1.cin的输入原理:
与scanf函数一样,程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的:当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入。当遇到Enter、Space、Tab键时输入结束。
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
下一章学习输出,待续更新。。。