防止在流中输入不需要的值

时间:2017-03-15 06:50:08

标签: c++ string cin

这是我在这里的第二篇文章。

我想问一下std :: cin的概念,我想创建一个程序来保存个人信息并在流中显示它,但我需要确保用户不能输入与string不同的值类型“姓名,年龄”变量中的int 这是我的代码:

#calendar {
  display: flex;
  flex-flow: row wrap;
}

#calendar div {
  width:14%;
  text-align: center;
}

我知道这是一个非常基本的问题,但我觉得很难处理cin.good,cin.sync。如果有人能够解释处理这些问题的基本概念,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

关注Aeonos评论,我建议首先将所有输入记录到 std :: string 中,然后使用一些转换库转换值,例如: boost::lexical_cast

答案 1 :(得分:0)

标准C ++中没有办法阻止用户以不同于程序期望的形式提供输入。

最可能的是以某种形式阅读所有输入,分析输入,丢弃不需要的部分,并根据需要解释其余部分。

Aeonos在评论中提到的一个例子是将所有数据读取到std::string(例如使用std::getline(std::cin, some_std_string))。一旦读取了字符串,就可以检查它是否包含一个名称(但是你指定了它)或一个整数(假设它只包含数字,如果你希望输入一个正整数)。如果字符串不包含所需的输入形式,则丢弃输入,并重复该过程(例如,在循环中)。如果它确实包含所需形式的输入,请提取所需的值。

通常,您不会使用输入流操作符(cin >> whatever)来执行此操作 - 错误检查的选项太有限。