C/C++格式化输入,输出

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++

  1. 利用stringstream 流进行处理,安全
    • stringstream 中包含
      + istringstream (输入)
      + ostringstream(输出)
  2. 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进制数小写输出
原文地址:https://www.cnblogs.com/Kernel001/p/10041866.html