C++學習之IO流(輸入輸出流)詳解
介紹
流: 若幹字節數據從一端到另一端我們叫做流
例如:操作文件,從程序到文件,數據的流動的操作稱為流操作
流類體系
專門處理輸入輸出流、字符流、文件流,包含有:
- 流對象
- 流運算符 >> <<
輸入/出流對象 + 流運算符 >> <<—處理輸入輸出的數據
字符流對象 + 流運算符 >> << —處理字符流
文件的對象 + 流運算符 >> << —讀寫文件
基本輸入、輸出流
istream 類—cin 輸入
ostream類—cout 輸出
tip:輸出流除瞭cout外,還有一些別的對象(效果和cout一樣)
- cerr —標準出錯
- clog —日志文件輸出
#include <iostream> using namespace std; void testostream() //output { //freopen() cout << "標準輸出" << endl; //cin/cout都可以重定向 cerr << "標準錯誤輸出" << endl; //不能重定向 當覺得程序可能出錯時用cerr輸出,標識作用 clog << "日志文件輸出" << endl; //可以重定向為文件 } int main(){ testostream(); } /*輸出*/ /*標準輸出 標準錯誤輸出 日志文件輸出*/
freopen
把程序的輸入、輸出重定向為文件
重定向是文件中的數據的格式要與程序讀取的格式一致
輸入重定向
#include<cstdio> #include<iostream> int main(){ freopen("1.txt","r",stdin);//參數:文件名 讀寫方式 流 int a,b; scanf("%d%d",&a,&b); //把基本輸入定向為文件,程序所有的輸入由文件完成 std::cout<<a+b; } /*輸出*/ /* 在黑窗口輸出3 */
輸出重定向
#include<cstdio> #include<iostream> int main(){ freopen("1.txt","r",stdin);//參數:文件名 讀寫方式 流 int a,b; scanf("%d%d",&a,&b); //把基本輸入定向為文件,程序所有的輸入由文件完成 std::cout<<a+b; freopen("2.text","w",stdout); printf("%d",a+b); } /*輸出*/ /* 在2.txt中輸出3 */
字符類的處理
- 正常的操作
- 通過IO流對象調用成員函數的方式
單個字符和字符串的輸出處理
//調用成員函數的方式傳常量、變量都可以 void testostream() { //單個字符的輸出 cout.put('a'); //傳常量 通過IO流對象調用成員函數的方式 cout << 'a' << endl; //正常的輸出方式 char c = 'C'; cout.put(c); //傳變量 cout << c << endl; //多個字符/字符串的輸出 cout.write("ILoveyou",4); /*直接寫入輸出 後面的參數:指定長度,超過長度的部分不做輸 出截取輸出沒有'\0',隻截取瞭前面4位*/ } int main(){ testostream(); } /*輸出*/ /*aa CC ILov*/
單個字符和字符串的輸入處理
void testostream() { //單個字符的輸入 /* char c; c=cin.get(); cout.put(c); 用中間變量接收返回值,再做輸出*/ cout.put(cin.get()); //要處理回車 cout << endl; //多個字符/字符串的輸入 cout << "字符串的處理"<<endl; while (cin.get() != '\n'); //while(getchar()!='\n'); char str[20] = ""; //準備一個字符串 註意不是返回值不能一步到位 cin.getline(str, 20);//輸入函數 cout.write(str, 20); //輸出函數 相對於流操作更安全,可以指定長度,同樣需要清空緩沖區處理 } int main() { testostream(); } /*輸出*/ /*a a 字符串的處理 hello hello*/
註意不能用來處理string
string text; cin.getline(text,20); //報錯,不能處理string,隻能處理char*
格式控制字符
包含頭文件 <iomanip>
常用的格式控制,一種是調用成員函數方式,一種流控制字符去做
- 設置有效位數: setprecision(n)
- 設置精度: fixed 結合 setprecision 使用
tip:流控制字符—c++用來控制格式的操作
設置格式
int main(){ double pi = 34.12343; cout << "設置有效位數是:" << setprecision(4) << pi << endl; //從整數位開始算 cout << "有效小數位:" << fixed << setprecision(4) << pi << endl;//從小數位開始算 //所有的流控制符都會對應一個成員函數的方式 cout.precision(4); cout << "有效小數位:" << pi;/*設置完流格式不一定要立即輸出, 可以緩慢輸出(在下一行輸出)*/ double pi = 34.12369; cout << "設置有效位數是:" << setprecision(4) << pi << endl; cout << "有效小數位:" << fixed << setprecision(4) << pi << endl; cout.precision(4); //所有的流控制符都會對應一個成員函數的方式 cout << "有效小數位:" << pi; } /*輸出 四舍五入 */ /* 設置有效位數是:34.12 有效小數位:34.1234 有效小數位:34.1234 設置有效位數是:34.12 有效小數位:34.1237 有效小數位:34.1237 */
進制輸出
int main(){ cout << hex << 32 << endl; //16進制 cout << oct << 15 << endl; //8進制輸出 //流控制字符的方式 cout << setbase(2) << 7 << endl; //2進制無效,不能是任意進制,任意進制的默認10進制輸出 } /*輸出*/ /*20 17 7*/
對齊方式和數據的寬度問題 制表符 ‘\t’
限制每個數據的位數不足補空格
1. 8位制表,不足8位 補空格
2. 超過8位,按照16位制表
//默認右對齊 int main(){ cout << setw(8) << "123" << setw(8) << "12344" << setw(8) << "3444" << endl; cout << setiosflags(ios::left);//ios::right右對齊 ios::left左對齊 數據不夠用空格占位 cout << setw(8) << "123" << setw(8) << "12344" << setw(8) << "3444" << endl; /*cout.width(8); cout<<"123"<<"123"<<"666"; 調用成員函數的方式,隻能管一個制表 } /*輸出*/ 123 12344 3444 //默認是右對齊方式 123 12344 3444 123 123666
到此這篇關於C++學習之IO流(輸入輸出流)詳解的文章就介紹到這瞭,更多相關C++ IO流內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!