用户输入一个值(通过<iostream>
)到unsigned long long变量。如何检测输入变量是否为负数?输入流保持good()
状态。我可以不使用额外的string
变量吗?
unsigned long long SafeInput(){
unsigned long long buffer = 0;
while (!(cin >> buffer) || cin.get() != '\n')
{
cout << "Error. Input again: ";
cin.clear();
cin.sync();
}
return buffer;
}
答案 0 :(得分:3)
你不能,至少不能直接。由于各种历史原因,C ++ 即使输入无符号值,也允许使用减号。最好的你 可以做的是在读取字段之前检查:
input >> std::ws; // Skips white space
if ( input.peek() == '-' ) {
// Input begins with minus sign...
}
// Do input.
转换后的值,有关文本的信息 产生它的东西已经丢失了。
答案 1 :(得分:1)
如果您希望用户能够使用unsigned long long
的全部范围,那么您有两种选择:
否则你可以只处理变量,就好像它是一个有符号的long long
并测试最重要的位(或暂时转换它并执行&#34;正常&#34;比较)。
答案 2 :(得分:0)
在cin
期望未签名的号码时输入一个负数将设置流的失败状态,您可以cin.fail()
查询。
但是,输入大于ULLONG_MAX
的数字也会设置失败状态,因此您无法通过检查cin.fail()
来确定用户输入的值是太小还是太大。
如果您只想检测负输入,那么您需要使用字符串作为辅助变量,如UniversE所述。