为了学习C ++,我正在翻译我用Python编写的程序。
我写了这个
n = 0
while n < 2:
try:
n = int(raw_input('Please insert an integer bigger than 1: '))
except ValueError:
print 'ERROR!'
以便从用户那里获得大于1的整数。
这是我目前用C ++编写的内容:
int n = 0;
while (n < 2) {
cout << "Please insert an integer bigger than 1: ";
cin >> n;
}
我看了一下try-catch,看起来非常简单。我关心的是如何检查输入是否为整数。我读到了关于cin.fail()但我找不到任何官方文件,我也没有真正了解它是如何工作的。
那么,如何检查输入是否为整数?
更一般来说,我如何检查输入是否是&#34; 任何&#34;?
答案 0 :(得分:4)
对于这种情况,您可能希望将输入作为字符串读取,然后检查字符串(例如,&#34;仅包含数字,最多包含N位数字&#34;) 。当且仅当它通过检查时,解析出int
。
也可以将检查和转换结合起来 - 例如,Boost lexical_cast<int>(your_string)
将尝试解析字符串中的int,如果无法转换则抛出异常整个事情都是一个int。
答案 1 :(得分:2)
如果使用C ++ 11的std::stoi
结合std::getline
来读取整行输入,那么Python可以更直接地编译代码。这比使用标准I / O错误处理要容易得多,标准I / O错误处理可能没有用户友好的界面。
std::stoi
抛出std::invalid_argument
;如果数字太小或太大而无法放入std::out_of_range
,则int
抛出#include <iostream>
#include <string>
int main() {
int n = 0;
while (n < 2) {
std::cout << "Please insert an integer bigger than 1: ";
std::string input;
std::getline(std::cin, input);
try {
n = std::stoi(input);
} catch (std::exception const&) {
std::cerr << "ERROR!\n";
}
}
}
}。
#include <iostream>
#include <string>
int raw_input(std::string const& message)
{
std::cout << message;
std::string input;
std::getline(std::cin, input);
return std::stoi(input);
}
int main() {
int n = 0;
while (n < 2) {
try {
n = raw_input("Please insert an integer bigger than 1: ");
} catch (std::exception const&) {
std::cout << "ERROR!\n";
}
}
}
如果你想使代码更类似于它的Python等价物,那么你可以将输入封装在一个函数中:
<div class="col-sm-4 form-group">
<input id="lastNameAdd" name="lastName" data-bind="value: lastName" title="" data-role="validate" data-content="Last name is required." class="form-control" required="" placeholder="last name" data-original-title="last name" aria-describedby="popover270602">
<div class="popover auto fade top in" role="tooltip" id="popover270602" style="top: -74px; left: 400.688px; display: block;">
<div class="arrow" style="left: -323.806%;"></div>
<h3 class="popover-title">last name</h3>
<div class="popover-content">Last name is required.</div>
</div>
</div>