我现任教授陈述了他的教学大纲:
“永远不要使用cin>>直接读取数字变量,如int或double或float。读取字符串(C或C ++)并使用atoi或atof转换为数字。”
这有什么理由吗?起初我认为这是为了避免失败标志,但如果你只是添加输入验证码,那么“cin>> myInt”就不行了吗?
使用他的方法,如果他们输入“4a5”并且我做过atoi会不会出现错误?
感谢〜
答案 0 :(得分:5)
一般来说,它根本没有任何问题。这个建议似乎是错误的。
事实上,仅依靠stoi
和朋友,您就失去了任何控制转化过程的能力。您可能希望在某些特定于域的情况下使用这些,在这种情况下,您要提取特定数量的字符,然后尝试转换它们,但这取决于业务逻辑。
当然,依赖过时的代码atoi
更糟糕的是,它的未定义行为会遇到许多失败案例。
答案 1 :(得分:1)
这不错,但它不安全:如果流获得无效数据,它将最终处于“失败”状态。这意味着程序员需要检查流是否仍在工作,然后处理数据。如果没有,重置流后,失败后的所有内容都将丢失。
Getline对于这些情况更好,因为它不会以相同的方式工作,它只会接受所有输入作为字符串。
答案 2 :(得分:1)
虽然这是有效的代码......
int num;
cin >> num;
...如果用户输入的字符无法解释为int,则会出现问题。
这就是为什么使用带有cin的字符串变量更安全并以编程方式进行数据提取。