while (!correct)
{
cout << "Please enter an angle value => ";
cin >> value; //request user to input a value
if(cin.fail()) // LINE 7
{
cin.clear(); // LINE 9
while(cin.get() != '\n'); // LINE 10
textcolor(WHITE);
cout << "Please enter a valid value. "<< endl;
correct = false;
}
else
{
cin.ignore(); // LINE 18
correct =true;
}
}
嗨,这是我写的代码的一部分。这段代码的目的是限制用户输入数字,如 10,10.00 等,如果他们输入值,如(abc,!$@ 等)代码将要求用户重新输入值。
为了执行此功能(限制用户输入有效的 valus),我通过论坛获得一些提示和指南。
我认为我有责任学习和理解这些代码的作用...因为这是我第一次使用此代码。有人可以向我简要解释第 7,9,10 和 18 行中的代码是做什么的吗?特别是第 10 行。
谢谢你的导游,我很感激!
cin.fail()
告诉你在以前的输入操作中是否“失败”。我认为输入流有四个可识别的状态:bad
,good
,eof
和fail
(但是fail
和bad
可以同时设置,例如)。
cin.clear()
将状态重置为good
。
while(cin.get() != '\n') ;
将读取,直到当前输入行结束。
cin.ignore();
将跳到下一个换行符,因此与while(cin.get() != '\n');
非常相似。
整个代码也应该检查文件的结尾,或者如果没有给出正确的输入并且输入是“结束”(例如 CTRL-Z 或 CTRL-D 取决于平台),它将挂起(永远循环失败)。
// LINE 7:
cin.fail()检测输入的值是否符合变量中定义的值。
// LINE 18:
cin 将换行符留在流中。将 cin.ignore()添加到下一行将清除 / 忽略流中的换行符。
第 7 行:测试输入的数据是否正确(可以读为decltype(value)
)。如果流出现错误,则cin.fail()
始终为true
。稍后,在
第 9 行:您将cin
状态从 bad 清除为 previous,normal 状态。(在错误后恢复)。在从 bad 状态恢复之前,您无法再读取数据。
第 10 行:你读到行尾。基本上你从输入中跳过一行
第 18 行:该行仅在输入的数据被纠正时才执行。它从 stdin 读取并丢弃一行。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(82条)