首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在多个输入中检查非整数输入

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

Stack Overflow用户
提问于 2015-11-06 08:24:42
回答 2查看 127关注 0票数 1

我在这个程序上工作了一段时间,但我找不到一种方法来使cin.fail()输出“输入不正确”。在2号,3号,4号,...第二个二进制数的数字。例如,"11111 a11“被检测为输入失败,但"11111 1a1”或"11111 1abfcds“未被检测到。它似乎只检查第一个数字。这是程序。

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

发布于 2015-11-06 09:20:14

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

获得要解析的值后,使用函数对其进行验证:

代码语言:javascript
复制
template <typename T>
bool convert_to( const std::string& s, T& value )
{
  std::istringstream ss( s );
  ss >> value >> std::ws;
  return ss.eof();
}

--在我脑海中打字;可能出现了打字错误。

票数 0
EN

Stack Overflow用户

发布于 2015-11-08 20:54:35

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

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33557348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档