Loading

对课程第二次作业的补充与反馈

课程第二次作业的补充

github地址:Github传送门

前言

往往在别人的身上,总有许多值得自己学习的地方。这句话一点没错,尤其当你看向那些优秀的同学时,你会发觉他们之于你之间,差距的不仅仅是写出的代码质量,还有对待平常每个事物的拓展、钻研能力等等,所以,你的不优秀是脱不开自己懒惰的干系。

补充 1. 关于输入流的清空问题

用户的输入错误有时候是在所难免的,所以如何处理这些错误,如何有效的引导用户正确的输入?我们就有必要去学习输入流的清空问题。以下就作出我自己的学习总结:

当用户输入的数据类型无法和你设定的数据类型匹配时,常见的,在cin当中有这样一个检测错误的办法 —— cin.fail()。

cin.fail()初置0,一旦输入不符合,其值置为1,说明此时发生非致命错误即ios::failbit,因上次输入的不符合数据依旧在输入缓冲区里,所以导致输入流无法正常工作,这也就导致以下的输出会传出不确定值。

要想重新使得用户的输入流回归正常运转,我们有必要使得输入流的状态回到最初可执行的模样,所以cin.clear()就用于状态的恢复,去除内部的错误标识符,而要使得输入缓冲流真正的清空,就要依赖cin.sync()或cin.ignore()来清空一下原有的垃圾。

这里还得说一下有必要使用

cin.ignore(numeric_limits<streamsize>::max(), '\n'); 

它能够实现对输入流整行的清空,把回车'\n'(包括回车)之前的所有字符从输入缓冲(流)中清除出去.

其中一长串的

numeric_limits<std::streamsize>::max()

是函数,返回编译器允许的double型数的最大值。不过是climits头文件定义的流使用的最大值,我们其实也可以用一个足够大的整数来代替它。

存在的一个小困惑

这里要抛出一个我遇到的问题,查了很久但还是不知道出错在哪,也希望懂得人能够给我指点一番。在编写代码的过程中,我也试用了一下cin.sync(),但是在清空的过程中出现了死循环的情况,
我让输出r的值,给出的结果竟让是-9.25596e+61,所以也希望有谁能够帮帮忙解答一下我遇到的困惑,附上我一直执行死循环的代码。

    cin >> r;
    while ( cin.fail() || r < 0 )
    {
        cout << endl;
        cout << "您的输入有误,请重新输入你所想要的半径值"<<endl;
        cin.clear();       //恢复原始状态
        cin.sync();
        // cout << r << endl;
        cout << "请输入您需要的圆半径 r =  ";
        cin >> r;
        cout << endl;
	}

错误的输出结果如下

补充 2. 关于规范程序员应该做到几步注意

  1. cin、cout的放置应当置于main的主函数里,而不能放置在其他的cpp文件中;
  2. 在.h中对文件进行声明,在.cpp文件中对函数进行定义;
  3. " #define "等需放置在.h的头文件里;

.h文件其实算是一个大纲的存在,可提供给他人直观的查看代码内部的整体构型,.cpp文件有时候并没有提供给他人的必要,而只需给他人.h与自我编译好的文件就可以。

这些注意点算是对以后自己编写代码的一个警示,在这先声明一番。

以上就是我对这次作业的总结与反馈,谢谢观赏!

菜鸡小豪的程序员之路还在持续进行中......

posted @ 2017-04-29 02:22  诀别、泪  阅读(207)  评论(4编辑  收藏  举报