c++ - 检查用户输入的整数是否包含全 1 或 0?
问题描述
我尝试将其转换为字符串并测试该字符串,但似乎找不到正确的方法来检查它并在用户输入 1 或 0 以外的内容时重新提示用户。
int binNum, decNum = 0, i = 0, remainderAmount;
string testString;
cout << "Enter a binary number: ";
cin >> binNum;
testString = to_string(binNum);
for (int i = 0; i < testString.length(); i++)
{
while (testString[i] != 1 && testString[i] != 0)
{
cout << "Please enter a valid binary number: ";
cin >> binNum;
testString = to_string(binNum);
}
}
cout << "Binary number: " << binNum << " is ";
while (binNum != 0)
{
// Check if remainder is 0 or 1
remainderAmount = binNum % 10;
// Remove the last digit from the binary number
binNum /= 10;
// Get first decimal number
decNum += remainderAmount*pow(2,i);
// Increment the place for the binary power i
i++;
}
cout << decNum << " in decimal" << endl;
cout << endl;
解决方案
testString[i]
是一个char
,不是一个int
。
0
并且1
是int
s。
'0'
并且'1'
是char
s。
整数0
与字符不同'0'
(十六进制 0x30,十进制 48)。
整数1
与字符不同'1'
(十六进制 0x31,十进制 49)。
这就是您while
无法正常工作的原因。
此外,每次提示用户输入新的输入字符串时,您都不会从头开始重新测试该字符串。您正在从先前错误输入停止的相同索引处获取。每次提示用户时,您都需要重新测试完整的输入。
尝试更多类似的东西:
bool isValid(int num) {
string testString = to_string(num);
for (int i = 0; i < testString.length(); i++) {
if (testString[i] != '1' && testString[i] != '0')
return false;
}
return true;
/* alternatively:
return (to_string(num).find_first_not_of("01") == string::npos);
*/
}
...
cout << "Enter a binary number: ";
do {
if (cin >> binNum) {
if (isValid(binNum)) {
break;
}
} else {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
cout << "Please enter a valid binary number: ";
}
while (true);
推荐阅读
- groovy - 如何使用命名参数并防止使用默认构造函数?
- java - 创建新文件时触发android
- visual-studio-code - VSCode:如何在上部选项卡上仔细检查时防止编辑器扩展
- python - 函数 add_time(time1,time2)
- javascript - 如何在节点 js 中找到本周的星期一?
- wpf - WPF 将 SelectedItem 绑定到另一个对象的属性
- javascript - 嵌套的 AngularJS 指令未从 Angular 组件获取表单
- uwp - UWP ApplicationData.Current.LocalFolder 在版本中为空
- javascript - 我的测试失败,因为“找不到 react-redux 上下文值;请确保组件包装在
" - jupyter-notebook - jinja2.exceptions.TemplateNotFound: null.tpl