如何检查多个输入中的非整数输入

时间:2015-11-06 00:24:42

标签: c++ input

我正在研究这个程序一段时间,我找不到让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;
}

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;
}