- 算法競賽寶典(第一部):語言及算法入門
- 張新華
- 1005字
- 2021-03-19 19:27:44
數(shù)據(jù)輸入輸出
C++的輸入輸出功能是由函數(shù)來實現(xiàn)的,例如putchar(輸出字符),getchar(輸入字符),cin(輸入流),cout(輸出流)等。
putchar函數(shù)(字符輸出函數(shù))的作用是向終端輸出一個字符。例如:
putchar(c); //輸出字符變量C的值
請看下例:
1 //putchar函數(shù)的使用 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 char a='A',b='B',c='C'; 8 putchar(a); 9 putchar(b); 10 putchar(c); 11 system("pause"); 12 return 0; 13 }
運行結(jié)果為ABC。
我們可以用putchar()函數(shù)輸出控制字符,如putchar('\n')輸出一個換行符。
還可以輸出其他轉(zhuǎn)義字符,如:
putchar (' \101 '); //輸出字符'A' putchar (' \\ '); //輸出斜杠 putchar (' \015 '); //輸出回車,不換行,使輸出的當(dāng)前位置移到本行開頭
getchar函數(shù)(字符輸入函數(shù))的作用是從終端輸入一個字符,其一般形式為getchar()。例如:
1 //使用getchar函數(shù)輸入單個字符 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 char c; 8 c=getchar(); 9 putchar(c); 10 system("pause"); 11 return 0; 12 }
在運行時,如果從鍵盤輸入字符'a'并按回車鍵,就會在屏幕上看到輸出的字符'a'。
請注意:getchar()只能接收一個字符,接收的字符可以賦給字符變量或整型變量也可以不賦給任何變量。如:
putchar(getchar());
puts()
向屏幕輸出字符串并換行。
gets()
從鍵盤獲得字符串,回車不算字符串。
某些情況下,程序需要以八進制或十六進制數(shù)的形式輸出結(jié)果。C++提供了簡單的實現(xiàn)方法:只要在輸出流中輸出操作符dec(十進制)、oct(八進制)或hex(十六進制)即可,下面的程序分別以十進制、八進制、十六進制輸出n的值。
1 //進制轉(zhuǎn)換 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 int n=314; 8 cout<<"十進制: "<<dec<<n<<endl; 9 cout<<"八進制: "<<oct<<n<<endl; 10 cout<<"十六進制:"<<hex<<n<<endl; 11 system("pause"); 12 return 0; 13 }
表1.6是常用的I/O流類庫操作符,注意,設(shè)置一些特殊的格式時,我們還需使用I/O流類庫提供的操縱符。使用操縱符時,首先必須在源程序的開頭包含iomanip。
表1.6

一旦使用了這些進制操作符,它們的作用域?qū)⒁恢背掷m(xù)到程序結(jié)束,或者遇到另一個進制操作符為止。
C++提供的setw操作符可以指定每個數(shù)值占用的寬度。為了使用setw,程序必須包括頭文件iomanip,setw操作符只對緊跟著它的數(shù)值有效。如果要為多個數(shù)值設(shè)定寬度,必須多次使用setw操作符。
分析以下程序的執(zhí)行結(jié)果。
1 //setw操作符的使用 2 #include <iostream> 3 #include <iomanip> 4 using namespace std; 5 6 int main() 7 { 8 double a=234.34; 9 cout<<setw(10)<<1234567890<<endl; 10 cout<<setw(4)<<a<<endl; 11 cout<<setw(6)<<a<<endl; 12 cout<<setw(8)<<a<<endl; 13 cout<<setw(10)<<a<<endl; 14 system("pause"); 15 return 0; 16 }
使用right或left可以控制字符串向左靠齊還是向右靠齊。例如:
cout<<left;
C++提供的setprecision操作符可以控制浮點數(shù)的輸出精度,其中的參數(shù)代表輸出的浮點數(shù)的個數(shù)。為了使用該操作符,程序必須包括頭文件iomanip。
分析以下程序的執(zhí)行結(jié)果。
1 //setprecision用法 2 #include <iostream> 3 #include <iomanip> 4 using namespace std; 5 6 int main() 7 { 8 double a=234.1234567890; 9 cout<<a<<endl; 10 cout<<setprecision(4)<<a<<endl; 11 cout<<setprecision(5)<<a<<endl; 12 cout<<setprecision(6)<<a<<endl; 13 cout<<setprecision(7)<<a<<endl; 14 cout<<setprecision(8)<<a<<endl; 15 cout<<setprecision(9)<<a<<endl; 16 cout<<setprecision(15)<<a<<endl; 17 system("pause"); 18 return 0; 19 }
一旦使用了這些setprecision操作符,它的作用域?qū)⒁恢背掷m(xù)到程序結(jié)束,或者遇到另一個setprecision操作符為止。
單純使用setprecision()函數(shù),并不能精確控制小數(shù)點后保留多少位,而是將整數(shù)與小數(shù)加起來的位數(shù),如果僅僅控制小數(shù)點后的位數(shù),需加fixed函數(shù)。見下例:
1 //fixed函數(shù)的使用 2 #include <iostream> 3 #include <iomanip> 4 using namespace std; 5 6 int main() 7 { 8 float a=111.223333; 9 cout<<setprecision(6)<<fixed<<a<<endl; 10 system("pause"); 11 return 0; 12 }
C++提供的setfill操作符可以填充字符。為了使用該操作符,程序必須包括頭文件iomanip。
分析以下程序的執(zhí)行結(jié)果。
1 //setfill用法 2 #include <iostream> 3 #include <iomanip> 4 using namespace std; 5 6 int main() 7 { 8 double a=234.123; 9 cout<<a<<endl; 10 cout<<setw(10)<<setfill('*')<<setprecision(4)<<a<<endl; 11 cout<<setw(10)<<setprecision(10)<<a<<endl; 12 system("pause"); 13 return 0; 14 }
也可以直接使用cout的相關(guān)函數(shù)如precision、width、fill和put等函數(shù)。
分析以下程序的運行結(jié)果。
1 //輸出控制 2 #include <iostream> 3 #include <iomanip> 4 using namespace std; 5 6 int main() 7 { 8 double a=234.123456; 9 cout<<a<<endl; 10 cout.precision(7); 11 cout<<a<<endl; 12 cout.width(8); 13 cout<<a<<endl; 14 cout.fill('*'); 15 cout.width(10); 16 cout.precision(5); 17 cout<<a<<endl; 18 system("pause"); 19 return 0; 20 }
put函數(shù)用于輸出字符,put可以級聯(lián),如put('a').put('b')。
請看下面的程序:
1 //put級聯(lián) 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 cout.put('C').put('+').put('+').put('\n'); 8 system("pause"); 9 return 0; 10 }
C++提供了輸入流cin,可以利用輸入流cin讀取鍵盤輸入的字符和數(shù)字等。我們可以使用I/O操作符控制輸入的格式。
請看下面的程序:
1 //輸入格式控制 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 int a,b,c; 8 cout<<"a:";cin>>dec>>a; 9 cout<<"b:";cin>>oct>>b; 10 cout<<"c:";cin>>hex>>c; 11 cout<<"a="<<a<<endl; 12 cout<<"b="<<b<<endl; 13 cout<<"c="<<c<<endl; 14 system("pause"); 15 return 0; 16 }
cin提供了get成員函數(shù)從指定的數(shù)據(jù)流中輸入一個字符,并返回這個字符作為函數(shù)調(diào)用的值。
請看下面的程序:
1 //get成員函數(shù)的使用 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 char c; 8 c=cin.get(); 9 cout<<"c:"<<c<<endl; 10 cout<<"ASCII:"<<(int)c<<endl; 11 system("pause"); 12 return 0; 13 }
cin提供了getline函數(shù),其格式為:getline(字符串首地址,最大長度);用于將用戶輸入的字符串存放在“字符串首地址”指定的內(nèi)存中,其最大長度不能超過“最大長度”指定的值。該函數(shù)的一個用處是可以讀入一行帶空格的字符串,當(dāng)然gets()函數(shù)也能達(dá)到同樣效果。
下面的程序是輸入一個字符序列(最大長度不超過80)并輸出:
1 //getline的使用 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 char a[80]; 8 cin.getline(a,80); 9 cout<<a<<endl; 10 system("pause"); 11 return 0; 12 }
我看附錄中C語言的輸入輸出語句,即scanf和printf也完全可以完成以上的格式控制,而且還特別好用,速度也非常快。
建議在大批量讀寫數(shù)據(jù)時,使用C語言的輸入輸出語句。
【上機實踐】 格式練習(xí)
編寫一個程序,按以下格式輸出數(shù)據(jù),其中姓名部分寬度為8,左靠齊,第2列數(shù)據(jù)寬度為10,左靠齊,第3列數(shù)據(jù)格式寬度為10,右靠齊:
張三 345.5—— ***34345.4
李四 342.2—— *****123.5
劉強 556.6—— *343434.55
- 從零開始構(gòu)建企業(yè)級RAG系統(tǒng)
- Servlet/JSP深入詳解
- CKA/CKAD應(yīng)試教程:從Docker到Kubernetes完全攻略
- Mastering JBoss Enterprise Application Platform 7
- Instant Nancy Web Development
- Java程序員面試筆試寶典(第2版)
- Java語言程序設(shè)計教程
- 代碼閱讀
- Arduino機器人系統(tǒng)設(shè)計及開發(fā)
- Python大規(guī)模機器學(xué)習(xí)
- C語言程序設(shè)計實驗指導(dǎo)
- Learning NHibernate 4
- Mastering Swift 4(Fourth Edition)
- 陪孩子像搭積木一樣學(xué)編程:Python真好玩+Scratch趣味編程(全2冊)
- 區(qū)塊鏈原理、設(shè)計與應(yīng)用