cin和char数组的怪异行为



C++初学者。我正在尝试制作一个添加2个二进制数的程序,但没有成功。我的想法(我还不想看到练习的解决方案(是获得2个数组的输入,然后使用数组上的位置将两者与第三个结转的值进行比较。

例如,如果第一个数字上的最后一个数字是1,第二个数字上最后一个是1,则将最后一个设置为1并进位1。之后,如果第一个数字的倒数第二个数字是1,而数字2的倒数第二数是0,则将第二个数设置为1并进位1。类似的东西。可能有一个循环;不确定它会起作用,但我想尝试一下,作为练习的一部分。

但我甚至没有触及程序的核心,因为我无法让cin正确地处理数组。

参见:

#include <iostream>
using namespace std;
int main ()
{
char bin1[3]{0,0,0};
char bin2[3]{0,0,0};
cin>>bin1;
cin>>bin2;
cout<<bin1[0];
cout<<bin2[0];
}

输入:"123〃;"321〃;退货:"3〃;

为什么它没有返回13?

然后:

{
char bin1[3]{0,0,0};
int n=1;
int r;
cin>>bin1;
r=bin1[n]+bin1[n];
cout<<r;
}

输入:111退货:98

为什么不返回2?

但是:

{
char bin1[3]{0,2,0};
int n=1;
int r;

//    cin>>bin1;
r=bin1[n]+bin1[n];
cout<<r;
}

按预期返回4。

当我调用数组中每个先前初始化的位置时,它会返回正确的数字,当我用这些数字进行操作时,一切都按预期进行;所以这不是因为我在混合char和int,对吧?我确信我测试了所有的可能性,甚至在声明中用0初始化了数组,只是为了确保这一点。

当cin的输入被考虑在内时,它才开始崩溃。我试图使用stringstream,但我认为它不适用于char数组,不确定吗?

老实说,我不知所措,这可能是一些明显的错误,但我仔细阅读了教程,找不到答案。

Cin不能像您认为的那样处理数组。您将需要在数组上循环以单独填充每个元素!

此外,C++具有bool类型,您可以在这里使用它来代替char。Cin>gt;bool会将输入的数字转换为false(如果数字为0(或true。更接近你所需要的。

关于你的补充:实施";二进制加法";。加法就是加法,结果总是一样的,无论在哪个基础上。因此,我建议将布尔数组转换为整数。然后加整数!如果你想把它们打印成二进制,你可以使用1<lt;shift将掩模移动到正确的位置;操作员提取该位置的位。

相关内容

  • 没有找到相关文章

最新更新