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进制数小写输出

猜你喜欢

转载自www.cnblogs.com/Kernel001/p/10041866.html