C++學(xué)習(xí)之IO流(輸入輸出流)詳解
介紹
流: 若干字節(jié)數(shù)據(jù)從一端到另一端我們叫做流
例如:操作文件,從程序到文件,數(shù)據(jù)的流動(dòng)的操作稱為流操作
流類體系
專門處理輸入輸出流、字符流、文件流,包含有:
- 流對(duì)象
- 流運(yùn)算符 >>? <<
輸入/出流對(duì)象 + 流運(yùn)算符 >>? <<---處理輸入輸出的數(shù)據(jù)
字符流對(duì)象 + 流運(yùn)算符 >>? ?<<? ?---處理字符流
文件的對(duì)象 + 流運(yùn)算符 >>? <<? ? ---讀寫文件
基本輸入、輸出流
istream 類---cin? ? ? ?輸入
ostream類---cout? ? ?輸出
tip:輸出流除了cout外,還有一些別的對(duì)象(效果和cout一樣)
- cerr ---標(biāo)準(zhǔn)出錯(cuò)
- clog ---日志文件輸出
#include <iostream>
using namespace std;
void testostream() //output
{
//freopen()
cout << "標(biāo)準(zhǔn)輸出" << endl; //cin/cout都可以重定向
cerr << "標(biāo)準(zhǔn)錯(cuò)誤輸出" << endl; //不能重定向 當(dāng)覺得程序可能出錯(cuò)時(shí)用cerr輸出,標(biāo)識(shí)作用
clog << "日志文件輸出" << endl; //可以重定向?yàn)槲募?
}
int main(){
testostream();
}
/*輸出*/
/*標(biāo)準(zhǔn)輸出
標(biāo)準(zhǔn)錯(cuò)誤輸出
日志文件輸出*/
freopen
把程序的輸入、輸出重定向?yàn)槲募?/p>
重定向是文件中的數(shù)據(jù)的格式要與程序讀取的格式一致
輸入重定向
#include<cstdio>
#include<iostream>
int main(){
freopen("1.txt","r",stdin);//參數(shù):文件名 讀寫方式 流
int a,b;
scanf("%d%d",&a,&b); //把基本輸入定向?yàn)槲募?程序所有的輸入由文件完成
std::cout<<a+b;
}
/*輸出*/
/* 在黑窗口輸出3 */
輸出重定向
#include<cstdio>
#include<iostream>
int main(){
freopen("1.txt","r",stdin);//參數(shù):文件名 讀寫方式 流
int a,b;
scanf("%d%d",&a,&b); //把基本輸入定向?yàn)槲募?程序所有的輸入由文件完成
std::cout<<a+b;
freopen("2.text","w",stdout);
printf("%d",a+b);
}
/*輸出*/
/* 在2.txt中輸出3 */
字符類的處理
- 正常的操作
- 通過IO流對(duì)象調(diào)用成員函數(shù)的方式
單個(gè)字符和字符串的輸出處理
//調(diào)用成員函數(shù)的方式傳常量、變量都可以
void testostream()
{
//單個(gè)字符的輸出
cout.put('a'); //傳常量 通過IO流對(duì)象調(diào)用成員函數(shù)的方式
cout << 'a' << endl; //正常的輸出方式
char c = 'C';
cout.put(c); //傳變量
cout << c << endl;
//多個(gè)字符/字符串的輸出
cout.write("ILoveyou",4); /*直接寫入輸出 后面的參數(shù):指定長度,超過長度的部分不做輸
出截取輸出沒有'\0',只截取了前面4位*/
}
int main(){
testostream();
}
/*輸出*/
/*aa
CC
ILov*/
單個(gè)字符和字符串的輸入處理
void testostream()
{
//單個(gè)字符的輸入
/* char c;
c=cin.get();
cout.put(c); 用中間變量接收返回值,再做輸出*/
cout.put(cin.get()); //要處理回車
cout << endl;
//多個(gè)字符/字符串的輸入
cout << "字符串的處理"<<endl;
while (cin.get() != '\n');
//while(getchar()!='\n');
char str[20] = ""; //準(zhǔn)備一個(gè)字符串 注意不是返回值不能一步到位
cin.getline(str, 20);//輸入函數(shù)
cout.write(str, 20); //輸出函數(shù) 相對(duì)于流操作更安全,可以指定長度,同樣需要清空緩沖區(qū)處理
}
int main() {
testostream();
}
/*輸出*/
/*a
a
字符串的處理
hello
hello*/
注意不能用來處理string
string text; cin.getline(text,20); //報(bào)錯(cuò),不能處理string,只能處理char*
格式控制字符
包含頭文件 <iomanip>
常用的格式控制,一種是調(diào)用成員函數(shù)方式,一種流控制字符去做
- 設(shè)置有效位數(shù): setprecision(n)
- 設(shè)置精度: fixed 結(jié)合 setprecision 使用
tip:流控制字符---c++用來控制格式的操作
設(shè)置格式
int main(){
double pi = 34.12343;
cout << "設(shè)置有效位數(shù)是:" << setprecision(4) << pi << endl; //從整數(shù)位開始算
cout << "有效小數(shù)位:" << fixed << setprecision(4) << pi << endl;//從小數(shù)位開始算
//所有的流控制符都會(huì)對(duì)應(yīng)一個(gè)成員函數(shù)的方式
cout.precision(4);
cout << "有效小數(shù)位:" << pi;/*設(shè)置完流格式不一定要立即輸出,
可以緩慢輸出(在下一行輸出)*/
double pi = 34.12369;
cout << "設(shè)置有效位數(shù)是:" << setprecision(4) << pi << endl;
cout << "有效小數(shù)位:" << fixed << setprecision(4) << pi << endl;
cout.precision(4); //所有的流控制符都會(huì)對(duì)應(yīng)一個(gè)成員函數(shù)的方式
cout << "有效小數(shù)位:" << pi;
}
/*輸出 四舍五入 */
/* 設(shè)置有效位數(shù)是:34.12
有效小數(shù)位:34.1234
有效小數(shù)位:34.1234
設(shè)置有效位數(shù)是:34.12
有效小數(shù)位:34.1237
有效小數(shù)位:34.1237 */
進(jìn)制輸出
int main(){
cout << hex << 32 << endl; //16進(jìn)制
cout << oct << 15 << endl; //8進(jìn)制輸出
//流控制字符的方式
cout << setbase(2) << 7 << endl; //2進(jìn)制無效,不能是任意進(jìn)制,任意進(jìn)制的默認(rèn)10進(jìn)制輸出
}
/*輸出*/
/*20
17
7*/
對(duì)齊方式和數(shù)據(jù)的寬度問題? ? ? ? 制表符 '\t'
限制每個(gè)數(shù)據(jù)的位數(shù)不足補(bǔ)空格?
1. 8位制表,不足8位? 補(bǔ)空格? ? ? ?
2. 超過8位,按照16位制表?
//默認(rèn)右對(duì)齊
int main(){
cout << setw(8) << "123" << setw(8) << "12344" << setw(8) << "3444" << endl;
cout << setiosflags(ios::left);//ios::right右對(duì)齊 ios::left左對(duì)齊 數(shù)據(jù)不夠用空格占位
cout << setw(8) << "123" << setw(8) << "12344" << setw(8) << "3444" << endl;
/*cout.width(8);
cout<<"123"<<"123"<<"666"; 調(diào)用成員函數(shù)的方式,只能管一個(gè)制表
}
/*輸出*/
123 12344 3444 //默認(rèn)是右對(duì)齊方式
123 12344 3444
123 123666
到此這篇關(guān)于C++學(xué)習(xí)之IO流(輸入輸出流)詳解的文章就介紹到這了,更多相關(guān)C++ IO流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++二維數(shù)組中數(shù)組元素存儲(chǔ)地址的計(jì)算疑問講解
今天小編就為大家分享一篇關(guān)于C++二維數(shù)組中數(shù)組元素存儲(chǔ)地址的計(jì)算疑問講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02
C語言實(shí)現(xiàn)刪除某一個(gè)數(shù)組值的方法
這篇文章主要給大家分享C語言數(shù)組中刪除數(shù)組中某個(gè)值的方法,既然要學(xué)習(xí)刪除數(shù)組中的元素,我們就必須得先知道數(shù)組中有哪些元素。同時(shí)還要定義一個(gè)變量,并將需要?jiǎng)h除的元素賦值給那個(gè)變量。下面來看看文章的詳細(xì)內(nèi)容吧2021-11-11
C/C++ int數(shù)與多枚舉值互轉(zhuǎn)的實(shí)現(xiàn)
在C/C++在C/C++的開發(fā)中經(jīng)常會(huì)遇到各種數(shù)據(jù)類型互轉(zhuǎn)的情況,本文主要介紹了C/C++ int數(shù)與多枚舉值互轉(zhuǎn)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2021-08-08
VC6.0如何創(chuàng)建以及調(diào)用動(dòng)態(tài)鏈接庫實(shí)例詳解
作為客戶與后臺(tái)的中介,為了更好的調(diào)節(jié)兩方的關(guān)系,我明智滴選擇了webservice以及動(dòng)態(tài)鏈接庫。在與客戶c++使動(dòng)態(tài)鏈接庫方式,而與后臺(tái)java,使用webservice來交流溝通2013-01-01

