输入
char a,b;
- cin>>a 遇到空白字符就认为结束
- cin.get(a) ; b=cin.get() 输入一个字符给a,
但是b=cin.get() 会承接输入字符给a后的一个enter,space,tab等,把他们继续留在缓冲区中
因此a是一个字符,b是一个enter/space/tab - cin.get(arrayname, size, s) 把数据输入到arrayname字符组中,但输入长度到达size时结束或者遇到字符s时结束
arrayname必须是字符数组,就像下面的a[10]一样,不可以是string,
size是最大的输入长度
s为控制,遇到s那么当前输入结束,缓冲区中的s将被舍弃
cin.get(arrayname, size) 当遇到enter时会结束目前的输入,并不会删除缓冲区中的enter
cin.getline(arrayname, size) 当遇到entre时会结束目前的输入,但是会删除缓冲区中的enter
char a[10];
cin.get(a,20);
cout<<a<<endl;
cout<<sizeof(a)<<endl;
//输入输出
1.------------
iam
iam
10
2.------------
iamlixinxin
iamlixinxin
10
3.------------
iamlixinxinxinxixnixnxin
iamlixinxinxinxixni
10
总之 :getline会删除缓冲区中的内容,get 并不会删除缓冲区中的内容
输出
ios::left 在串的末尾插填入充字符以使其左对齐
ios::right 在前面插入字符使其右对齐
ios::fixed 将浮点数按照普通定点格式处理
// #include<iostream>
char c[30]="this is string";
cout.width(30);
cout.fill('*');
//靠左对齐
cout.setf(ios::left);
//输出c和---L1
cout<<c<<"---L1"<<endl;
上面的结果等价于下面的
// #include<iomanip>
cout<<setw(30)<<left<<setfill('*')<<c<<"---L6"<<endl;
精度的控制1
showpoint: 表示打印浮点数的小数点和小数位数,即时显示的数值没有小数点,如果没有指定所需的小数点位数,则默认显示6个有效数组
setprecision(n) 表示显示n位有效数字 头文件是iomanip
fixed 是一种流操作符,表示浮点输出应该以固定点或者小数点表示法显示,也就是不使用科学计数法,一般与setprecision(n)一起使用,这是后n就表示小数点后面显示n位数字
当同时使用fixed和setprecision时,不需要使用showpoint
setbase(x) 可以控制精度
//include<iostream>
//include<iomanip>
double d=-1231.23290;
cout.width(30);
cout<<d<<"---L3"<<"\n"; //没有设置精度,显示的是两位
cout<<d<<endl; //-1231.23;
cout<<showpoint<<d<<endl; //-1231.23 默认打印6位数字
cout<<setprecision(3)<<d<<endl; //-1.23e+03 这里指的是1.23有三位数字
cout<<fixed<<d<<endl; //cout<<fixed<<setprecision(3)<<d<<endl 1231.233 因为使用了fixed,并且规定了precision
cout<<fixed<<showpoint<<setprecision(3)<<d<<endl; //这里设置了精度 1231.233 这里指的是.后面只有一位数字
精度的控制2
ios::oct 表示以八进制形式显示
ios::dec 表示以十进制形式显示
ios::hex 表示以十六进制形式显示
ios::showbase 表示为整数添加一个表示其进制的前缀
ios::showpoint 表示在浮点数表示的小数中强制插入小数点
ios::setw(n) 控制输出的间隔,默认是右对齐
ios::fixed 一种流操作符,表示浮点输出应该以固定点或者小数点表示法显示,也就是不使用科学计数法,
//下面这个例子其实是无效的,只是刚好默认的是十进制形式而已
// #include<iostream>
cout.setf(ios::dec|ios::showbase|ios::showpoint);
cout<<d<<endl; //-1231.23
//下面的例子是没有效果的
cout.setf(ios::hex|ios::showbase|ios::showpoint);
cout<<d<<endl; //-1231.23
//这个是有用的
cout.setf(ios::hex,ios::basefield); //告诉除了hex有用之外,其他均需要取消设置
cout.setf(ios::showbase|ios::showpoint); //这时设置的showbase是有用的,但是showpoint是不管用的
cout.width(30);
cout<<27<<"---L3"<<"\n"; // --------------------------0x1b---L3
?上面的例子中showbase是有用的,但是showpoint没有效果,并且将27换成浮点数比如19.19之后,得到的结果还是19.19,没有十六进制的转换,也没有十六进制的标志
//也可以这样写
cout.setf(ios::oct,ios::basefield);
cout<<100<<"----L5"<<"\n";
文件输入输出
#include<fstream>
ofstream //文件的写操作,写入存储设备, 从内存中读出
ifstream //文件的读操作,存储设备读取到内存中,向内存写入
fstream //读写操作,对打开的文件进行读写操作
文件的打开
void open ( const char * filename,
ios_base::openmode mode = ios_base::in | ios_base::out );
mode表示的是文件打开的方式
ios::in 输入到内存 也就是读
ios::out 输出到内存 也就是写
ios::ate 初始位置:文件末尾
ios::app 所有输出附加在文件末尾
ios::trunc 如果文件已存在则先删除文件
ios::binary 二进制方式
#include<iostream>
#include<fstream>
using namespace std;
int main(int argc, char const *argv[])
{
fstream ioFile;
ioFile.open("./a.dat",ios::out); //不会自己创建a.dat
ioFile<<"李四"<< " "<< 73<<" "<< 98<<" "<<60<<endl; //但是是从内存中读出到文件中, 重写a.dat文件
ioFile<<"王五"<< " "<< 74<<" "<< 97<<" "<<61<<endl;
ioFile<<"张三"<< " "<< 75<<" "<< 96<<" "<<62<<endl;
ioFile<<"钱六"<< " "<< 76<<" "<< 95<<" "<<63<<endl;
ioFile<<"黄七"<< " "<< 77<<" "<< 94<<" "<<64<<endl;
ioFile.close();
ioFile.open("./a.dat",ios::in|ios::binary); //以二进制的形式读取到内存
char name[10];
int chinese, math, computer;
cout<<"姓名\t"<<"英语\t"<<"数学\t"<<"计算机\t"<<"总分"<<endl; //从内存中读出
ioFile>>name;
while(!ioFile.eof())
{
ioFile>>chinese>>math>>computer;
cout<<name<<"\t"<<chinese<<"\t"<<math<<"\t"<<computer<<"\t"<<chinese+math+computer<<endl;
ioFile>>name;
}
ioFile.close();
system("pause");
return 0;
}
EOF
是end of file 的缩写,表示文字流(stream)的结尾,可以是文件,也可以是标准输入输出stdin
int main()
{
char ch;
ofstream out("./test.dat",ios::out|ios::binary);// 从内存中读取到test.dat
for(int i=0;i<90;i++)
{
if(i>0&&(i%30)==0)
{out.put('\n');
out.put(i);
out.put(' ');}
}
out.close();
ifstream in("./test.dat",ios::in|ios::binary);
while(in.get(ch))
cout<<ch;
in.close();
return 0;
}
//result
1 2 3 4 5 6 7 8 9 : ;
< = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y