我正在研究这个程序一段时间,我找不到让cin.fail()输出“输入不正确”的方法。在第二,第三,第四,......第二个二进制数的数字。例如,“11111 a11”被检测为输入失败,但未检测到“11111 1a1”或“11111 1abfcds”。它似乎只检查第一位数。这是程序。
#include <iostream>
#include <cmath>
using namespace std;
int binary_decimal_1(int n);
int binary_decimal_2(int m);
int decimal_binary(int s);
int main()
{
int n, m, s;
cout << "Input 2 binary numbers" << endl;
cin >> n;
if (cin.fail())
{
cout << "Incorrect input." << endl;
return 0;
}
cin >> m;
if (cin.fail())
{
cout << "Incorrect input." << endl;
return 0;
}
s= binary_decimal_1(n) + binary_decimal_2(m);
cout << "Sum: " << decimal_binary(s) << endl;
return 0;
}
int decimal_binary(int s) /* Function to convert decimal sum to binary result.*/
{
int rem, i=1, binary=0;
while (s!=0)
{
rem=s%2;
s/=2;
binary+=rem*i;
i*=10;
}
return binary;
}
int binary_decimal_1(int n) /* Function to convert binary number 1 to decimal.*/
{
int decimal_1=0, i=0, rem;
while (n!=0)
{
rem = n%10;
n/=10;
decimal_1 += rem*pow(2,i);
++i;
}
return decimal_1;
}
int binary_decimal_2(int m) /* Function to convert binary number 2 to decimal.*/
{
int decimal_2=0, i=0, rem;
while (m!=0)
{
rem = m%10;
m/=10;
decimal_2 += rem*pow(2,i);
++i;
}
return decimal_2;
}
答案 0 :(得分:0)
输入处理终止于遇到的第一个非数字字符。
获得要解析的值后,使用函数对其进行验证:
template <typename T>
bool convert_to( const std::string& s, T& value )
{
std::istringstream ss( s );
ss >> value >> std::ws;
return ss.eof();
}
- 键入我的头顶;可能已发生拼写错误。
答案 1 :(得分:0)
我通过使用字符串修复程序并检查错误输入,将字符串转换为整数,现在它可以正常工作。
#include <iostream>
#include <cmath>
#include <sstream>
using namespace std;
int binary_decimal_1(int n);
int binary_decimal_2(int m);
int decimal_binary(int s);
int main()
{
string n, m;
int s;
cout << "Input 2 binary numbers:" << endl;
cin >> n;
cin >> m;
bool bValidn = true; // Function to check for non numeric input in n.
for (unsigned int nIndex=0; nIndex < n.length(); nIndex++)
if (!isdigit(n[nIndex]))
{
bValidn = false;
cout << "Bad input.";
return 0;
}
bool bValidm = true; // Function to check for non numeric input in m.
for (unsigned int nIndex=0; nIndex < m.length(); nIndex++)
if (!isdigit(m[nIndex]))
{
bValidm = false;
cout << "Bad input.";
return 0;
}
// Now to convert strings into integers.
int intn;
stringstream convertn(n);
if ( !(convertn >> intn) )
intn = 0;
int intm;
stringstream convertm(m);
if ( !(convertm >> intm) )
intm = 0;
// And the hardest part.
s = binary_decimal_1(intn) + binary_decimal_2(intm);
cout << "Sum is: " << decimal_binary(s) << endl << endl;
return 0;
}
int decimal_binary(int s) // Function to convert decimal sum to binary result.
{
int rem, i=1, binary=0;
while (s!=0)
{
rem=s%2;
s/=2;
binary+=rem*i;
i*=10;
}
return binary;
}
int binary_decimal_1(int intn) // Function to convert binary number 1 to decimal.
{
int decimal_1=0, i=0, rem;
while (intn!=0)
{
rem = intn%10;
intn/=10;
decimal_1 += rem*pow(2,i);
++i;
}
return decimal_1;
}
int binary_decimal_2(int intm) // Function to convert binary number 2 to decimal.
{
int decimal_2=0, i=0, rem;
while (intm!=0)
{
rem = intm%10;
intm/=10;
decimal_2 += rem*pow(2,i);
++i;
}
return decimal_2;
}