C/C++格式化輸入,輸出
阿新 • • 發佈:2018-11-30
C/C++格式化輸入,輸出
1.C語言
1. 語言函式
scanf();
printf();
sscanf() --> 不安全
sscanf_s() ---> 安全
sprintf() --> 不安全 ----> sprintf_s()
2. 說下遇到的坑
string s1,s2; int i=0; sscanf(dest,"%d,%s,%s",&i,s1,s2); //-->如果時這樣寫的會 編譯可以會過,但是在執行的時候就會出現異常。 /* 所以在寫的時候就要寫C語言的型別,char* 其次該函式是不安全的函式,所以在使用的時候使用sscanf_s(), sprintf()函式也是一樣的問題,應該使用sprintf_s()函式 */
2.C++
- 利用stringstream 流進行處理,安全
stringstream 中包含istringstream (輸入)、ostringstream(輸出)
- stringstream 流出時遇到 逗號,回車時問題
string s = "1 1.3 aaa a "; string s1 = "abc,1,abcdef,abcdefg,aab"; stringstream ss; ss << s; int ia = 0; double db = 0.0; string sc = ""; char cd = ' '; ss >> ia; cout << "ia -> " << ia << endl; ss >> db; cout << "db -> " << db << endl; ss >> sc; cout << "sc -> " << sc << endl; ss >> cd; cout << "cd -> " << cd << endl; ss.clear(); cout << "*****************************" << endl; ss << s1; //ss >> sc; //cout << sc << endl; while(ss >> sc) {cout << sc << endl;}
結果:
3.利用stringstream型別轉換
可以把任意型別轉換成字串
template<class T>
void to_string(string & s;T &val)
{
stringstream ss << val;
s = ss.str();
}
4.C++格式化
1.cin >> noskipws -- > 不忽略任意地方空格
2.hex控制輸出的格式,預設為dec(十進位制),可手動設定dec,hex,oct。
3.setiosflags為控制格式,ios::uppercase 為輸出大寫十六進位制格式,也可以省略setiosflags直接寫uppercase.一共有7種格式
setiosflags(ios::fixed) --- 固定的浮點顯示
setiosflags(ios::scientific) --- 指數表示
setiosflags(ios::left) ---左對齊
setiosflags(ios::right) ---右對齊
setiosflags(ios::skipws) --- 忽略前導空白
setiosflags(ios::uppercase) --- 16進位制數大寫輸出
setiosflags(ios::lowercase) ---16進位制數小寫輸出