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++格式化
cin >> noskipws
-- > 不忽略任意地方空格- hex控制输出的格式,默认为dec(十进制),可手动设置dec,hex,oct。
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进制数小写输出