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

问题描述:

我在这个程序上工作了一段时间,我找不到一个方法来使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; 
} 

输入处理终止于遇到的第一个非数字字符。

一旦你得到的值来解析,用一个函数来验证它:

template <typename T> 
bool convert_to(const std::string& s, T& value) 
{ 
    std::istringstream ss(s); 
    ss >> value >> std::ws; 
    return ss.eof(); 
} 

--Typed了我的头顶部;错别字可能已经发生。

+0

您可以指定将新功能添加到编程功能的位置,并且我只是根据需要编辑此代码。 – Fallenone

+0

所有功能都是独立的东西。如果你不确定如何放置一个函数,你可能需要阅读一些基本的C++。然后,在'main()'中,你需要做的就是使用你喜欢的任何方法获得一个字符串,然后转换:'if(!convert_to (s,my_int))抱怨...' –

我通过使用字符串和检查那些不正确的输入,将字符串转换为整数,现在它工作,我修复了我的程序。

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