C++ 像字符一样用Int填充数组;C++;,cin对象

C++ 像字符一样用Int填充数组;C++;,cin对象,c++,C++,这是一个相当简单的问题;第一次的海报和长期的旁观者 这是我写的二进制到十进制的转换器: #include <iostream> #include <cmath> using namespace std; const int MAX = 6; int conv(int z[MAX], int l[6], int MAX); int main() { int zelda[MAX]; const int d = 6; int link[d];

这是一个相当简单的问题;第一次的海报和长期的旁观者

这是我写的二进制到十进制的转换器:

#include <iostream>
#include <cmath>
using namespace std;
const int MAX = 6;
int conv(int z[MAX], int l[6], int MAX);

int main()
{
    int zelda[MAX];
    const int d = 6;
    int link[d];

    cout << "Enter a binary number: \n";  
    int i = 0;
    while (i < MAX && (cin >> zelda[i]).get())  //input loop
    {
        ++i;
    }   

    cout << conv(zelda, link, MAX);

    cin.get();
    return  0;
}

int conv(int zelda[MAX], int link[6], int MAX)
{   
    int sum = 0;
    for (int t = 0; t < MAX; t++)
    {
        long int h, i;
        for (int h = 5, i = 0; h >= 0; --h, ++i)
            if (zelda[t] == 1)
                link[h] = pow(2.0, i);
            else
                link[h] = 0;
            sum += link[t]; 
    }
    return sum;
}
#包括
#包括
使用名称空间std;
常数int MAX=6;
int conv(int z[MAX],int l[6],int MAX);
int main()
{
int-zelda[MAX];
常数int d=6;
int-link[d];
cout>zelda[i]).get()//输入循环
{
++一,;
}   
cout=0;--h,++i)
if(zelda[t]==1)
链路[h]=功率(2.0,i);
其他的
链路[h]=0;
总和+=链路[t];
}
回报金额;
}
按照处理输入循环的方式,我必须在每次输入数字后按enter键。我还没有添加任何错误更正(我的一些变量是模糊的),但我想输入一个二进制文件,比如111111,而不是1 enter、1 enter、1 enter等来填充数组。我愿意接受任何技巧和其他建议。也许将其作为字符串输入并将其转换为int


我会继续研究的。谢谢

您可以通过以下方式读取int并对其进行解析:

int number = 0;

cin >> number;
int i = 0;
while(i < MAX)
{
    if(number > 0)
    {
        zelda[i] = number % 10; // or you can switch to zelda[MAX-(i+1)]
        number = number/10;
    else
    {
        zelda[i] = 0;
    }
    i++;
}
此操作有效的原因:
字符列表中表示的数字是连续的(在本例中为int),即数字0表示为48,数字1表示为49,依此类推。因此,当您减去“0”的表示形式时,就得到了实际的数字。

读取数据(并用
std::cin
替换文件流)

要转换,您可以执行一些简单的操作:

unsigned int convert(const std::string & s)
{
  // maybe check that s.size() <= CHAR_BIT * sizeof(unsigned int)

  unsigned int result = 0;

  for (std::string::const_reverse_iterator rit = s.rbegin(), rend = s.rend(); rit != rend; ++rit)
  {
    result *= 2;

    if (*rit == '1') ++result;

    else if (*rit != '0') { /*error!*/ return -1; }
  }

  return result;
}
无符号整数转换(常量std::string&s)
{

//也许可以检查s.size()您的变量命名是否最有趣。您的整个输入逻辑非常模糊。您为什么不简单地读取一个字符串,该字符串应仅由
1
s和
0
s组成,并将其转换为最佳变量命名法EVAR:)(必须发布此注释:))谢谢各位程序员。老实说,我没有太多考虑--,你应该用Master Swarm Dully返回你的总和。我喜欢这种方法,但我可能必须使用endian格式。肯定有一些想法。切换注释版本
zelda[MAX-(I+1)]
而不是
zelda[I]
,然后你切换。这一切都很好。我如何提高你的声誉?我不知道我是否可以在我的低级别上。只需单击向上箭头向上投票答案,然后单击V标记接受答案,所有用户都可以向上投票并接受答案。啊,我刚刚尝试过,但我需要15个代表。我仍然需要了解这个论坛的内部运作。我我将阅读该链接,并从另一个角度了解如何解决这个问题。似乎以字符串形式输入是最好的方法。
unsigned int convert(const std::string & s)
{
  // maybe check that s.size() <= CHAR_BIT * sizeof(unsigned int)

  unsigned int result = 0;

  for (std::string::const_reverse_iterator rit = s.rbegin(), rend = s.rend(); rit != rend; ++rit)
  {
    result *= 2;

    if (*rit == '1') ++result;

    else if (*rit != '0') { /*error!*/ return -1; }
  }

  return result;
}