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;}

结果:

1254474-20181129235128913-383463800.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值