我正在尝试为插入的任何二进制数输出“状态”(对于每个0,它输出1和最大之间的随机数),例如10100应该输出2,1和1之间的随机数。 2,3,1和1之间的随机数3,1和1之间的随机数3.看起来像21323或223212或21313等。但我的程序给我的输出是23456 - 为什么?
int main()
{
char binaryArray [0];
int c1=1;
int c0=0;
int i=0;
int n;
cout << "Enter length of binary: "; //Length = total number of 1s & 0s
cin >> n;
cout << "Enter binary number: ";
cin >> binaryArray;
cout << "States: ";
for(i; i<n; i++)
{
if(binaryArray[i]=1)
{
c1++;
cout << c1;
}
else if(binaryArray[i]=0)
{
c0++;
cout << rand()%c1+1;
}
/* if(c0 > c1)
{
cout << "Invalid Binary Representation.\n" << endl;
exit(0);
} */
}
system("PAUSE");
return 0;
}
答案 0 :(得分:3)
当你有一个0(即零)字符的数组时,你不能在其中保存任何,甚至不能保存一个位。使该数组“足够大”(无论对您意味着什么)或更好地使用std::string
。
哦,并在启用所有编译器警告的情况下编译代码。当您正确理解并修复所有这些警告后,您的程序应该更好地工作。 (提示:在条件内分配)
答案 1 :(得分:0)
首先,您在if
语句中进行了分配。使用==
代替=
。
其次,如果您希望将数字作为二进制输入并存储在char
数组中,请在比较时使用char
。因此,您的if
语句应为:
// vvvvvvv
if( binaryArray[i] == '1' )
{
c1++;
cout << c1;
}
// vvvvvvv
else if( binaryArray[i] == '0' )
{
c0++;
cout << rand()%c1+1;
}
第三,改变数组的大小:
char binaryArray [0];
这里必须不是0
。改变它更常见的东西。比如512
,例如,如果您认为这将足够大。