C++编程小知识(2),你刚接触编程吗?

阿树有点儿话

Hi ~你好呀
今后想在我的每一篇原创博文前都先谈一点题外话,
今天这段话给刚刚接触编程或者刚进入这个方面有关专业大学生。

因为自己也在之前一年多的时间里完全只是这个地方知识的搬运工,从来没有一星半点想要自己写东西的想法。

最初感觉是这里很多很厉害的人,自己是一个什么东西都不懂,对编程一无所知的小白,没有什么好写的。

但是到现在,一年多了将近两年,虽然自己知识仍然不够还有很多不足,但是我开始写写东西了,诚心觉得如果你们刚开始,可以边学习边在这里记录下你学到的东西的点滴。

就拿我自己来说,每写完一篇会有很大的成就感,不管有没有人看,至少每篇文章是自己在一步步在成长的见证。

每个人学东西都会经历一个阶段,从0到有到很多。可能学得慢,开窍晚,但是请相信坚持会有成长。

如果你现在经历着和我当初一样刚进大学对于生活以及学习方向的迷茫,欢迎私信我。
现在的我仍在努力成长,虽然我不一定能够完全解决你的问题,但是我会最真诚的回答你的问题。

这里是阿树,非常感谢你的阅读。

cin.clear()

如果 seconds 的数据类型为 short int,但是输入是31600000,显然这超过了short int 的最大取值,以下是一段测试代码:

#include<iostream>
int main()
{
    using namespace std;
    short int s1,s2;
    cin>>s1;
    cin>>s2;
    cout<<"s1:"<<s1<<" s2:"<<s2<<endl;
    return 0;
}

编译运行以下代码,输入 31600000,输出:

s1:32767 s2:0

s1 的值为 32767 这个数字转换为二进制是 111111111111111,是 short int 类型所能表示的最大的正数。s2 的值就很奇怪了,为 0。这是因为 std::cin 将 31600000 写入 short int 类型时发现了错误,将自己的 fail 成员设置为 true,之后继续调用 std::cin 不会读取缓冲区或触发用户输入。

我们可以使用 std::cin.clear() 消除错误,使 std::cin 可以继续工作。

#include<iostream>
int main()
{
    using namespace std;
    short int s1,s2;
    cin>>s1;
    cin>>s2;
    cout<<"s1:"<<s1<<" s2:"<<s2<<endl;
    if (cin.fail() == true)
        {
            cout<<"cin.fail() == true\n";
            cin.clear();

            cout<<"cin can work know\n";
        }
    cin>>s2;
    cout<<"s1:"<<s1<<" s2:"<<s2<<endl;
    return 0;
}

使用 cin 读取数据产生错误,如果不进行特殊处理,则之后调用 cin 也无法正常读取缓冲区或触发用户输入;cin.clear() 可以清除错误。
(此部分来自C++ primer plus 编程习题,跟着老师学了一遍感觉自己并没有掌握好,于是找出之前买的这本书再捋一遍自己的薄弱点)

#include < iomanip >

在c++程序里面经常见到下面的头文件
#include < iomanip >

这里面iomanip的作用比较多:
主要是对cin,cout之类的一些操纵运算子,
比如setfill,setw,setbase,setprecision等等。

它是I/O流控制头文件,就像C里面的格式化输出一样.以下是一些常见的控制函数:

dec 置基数为10 相当于"%d"
hex 置基数为16 相当于"%X"
oct 置基数为8 相当于"%o"

setfill© 设填充字符为c
setprecision(n) 设显示小数精度为n位

setw(n) 设域宽为n个字符
这个控制符的意思是保证输出宽度为n。如:

cout<<setw(3)<<1<<setw(3)<<10<<setw(3)<<100;

输出结果为1 10100 (默认是右对齐)
当输出长度大于3时(<<1000),setw(3)不起作用。

setioflags(ios::fixed) 固定的浮点显示
setioflags(ios::scientific) 指数表示
setiosflags(ios::left) 左对齐
setiosflags(ios::right) 右对齐
setiosflags(ios::skipws 忽略前导空白
setiosflags(ios::uppercase) 16进制数大写输出
setiosflags(ios::lowercase) 16进制小写输出
setiosflags(ios::showpoint) 强制显示小数点
setiosflags(ios::showpos) 强制显示符号
(此段来自久前笔记收录)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值