关于cin
-
cin.getline()
第一个参数是存放位置的指针,第二个参数是读取的最大大小。读取指定大小或者读到换行符为止,并读取换行符,丢弃。 -
cin.get()
参数同上,但是不读取换行符,需要使用cin.get()
无参数的版本将换行符读取掉,无参数版本返回值是读取到的字符,此外有参数返回值是istream
对象,所以可以拼接,例如cin.get(参数).get()
. 还有一个读取单个字符的版本cin.get(char)
。cin.get()
和cout.put(ch)
可以用来替换C语言中的getchar();putchar(ch)
如果具体实现只有这一个char类型参数的版本,可以用来输出int
类型,如cout.put(int)
否则需要cout.put(char(int))
-
char ch; cin >> ch;
cin
在读取char值的时候与读取其他基本类型一样将忽略空格和换行符。 -
检测到
EOF
后,cin
将两位(eofbit
和failbit
) 都置为1,cin.eof()
可以检测eofbit
是否为1,cin.fail()
可以检测failbit
或eofbit
是否被置为 1;cin
对象,可以被转换为bool
值,比上面两个函数更通用,因为可以检测到其他失败原因,如磁盘故障。可以使用cin.clear()
重置输入流 -
ifstream inFile; inFile.open('test.txt'); //判断文件是否成功打开很重要。 if(!inFile.is_open){ exit(EXIT_FAILURE); }
-
eof()
判断是否到达EOF
,fail()
方法检查EOF
和类型不匹配,good()
方法指出最后一次读取输入的操作是否成功。 -
cout.write()
方法显示整个字符串,第一个参数提供要显示的字符串的地址,第二个参数指出要显示多少个字符。write()方法并不会遇到空字符自动停止打印字符,而是打印指定数目字符,即使超出字符串的边界。 -
修改显示进制:十进制:
dec(cout)
或者cout << dec
, 十六进制hex
,八进制oct
. -
调整显示字段宽度:
cout.width(int i)
返回之前的字段宽度,只影响下一个显示的项目,之后恢复默认值,右对齐,C++不会截短数据 -
填充字符,C++ 默认空格填充字段中未被使用的部分,可以使用
cout.fill('*')
改为星号,效果持续。 -
设置浮点是显示精度:
cout.precision(int i)
默认是6位数字,效果持续 -
cout.setf()
方法包括其他字段显示的调整方法 -
cin.get() 和 cin.getline()
还可以有第三个参数,char类型表示读取输入的分界符。 -
istream & ignore(int = 1, int = EOF)
用于读取并丢弃第一个参数个字符或者直到第二个参数的分界符。cin.ignore(255,'\n');
-
cin.get() 和cin.getline()
读取一行时空行与空间不足问题,getline()
遇到空行,会读取换行符,所以不会设置failbit
,(可以通过判断存储的首字节是否是'\0'
来判断是否是空行),getline()
如果读取了最大数目(第二个参数减1)的字符,且下一个不是换行符,则设置failbit
,已有内容已被正确存到存储位置,如果用clear() 方法清楚了failbit
状态,还可以继续读出缓冲剩下内容 , 而get()由于不读取换行并丢弃,所以即使空间不足,行中还有其他字符,也不设置failbit
,可以用peek查看下一个输入字符,进行判断。 -
char gross[144]; cin.read(gross,144);
read() 方法区别在于不会在输入后加入空字符,因此不能将输入转换为字符串。 -
peek()
方法返回输入中的下一个字符,但不抽取输入流中的字符。 -
gcount()
方法 返回最后一个非格式化抽取方法读取的字符数。get(),getline() , read(), ignore()
方法读取,不是由运算符(>>)读取的,速度比strlen()
读取内容慢。 -
cin.putback(char);
将一个char字符,放入之后输入语句读的第一个字符。x