使用Bool数组进行实验

时间:2014-12-17 08:35:14

标签: c++ dynamic-arrays

我正在使用cpp中的布尔数据类型进行一些实验。 这是我的代码:

bool **darray;
darray=new bool* [3];
int i=0;
while(i<3)
{
    darray[i]=new bool [5];
    i++;
}
int m,n;
for(m=0;m<3;m++)
{
    for(n=0;n<5;n++)
    {
        cin>>darray[m][n];
    }

}
for(m=0;m<3;m++)
{
    for(n=0;n<5;n++)
    {
        cout<<darray[m][n]<<"\t";
    }
    cout<<endl;
}

我知道对于任何非零输入,存储的结果将为1。 但是当我输入大于1的任何数字时,存储在数组中的数字为1,数组的其余元素设置为0并且for循环停止。 例如,如果我在for循环的第一次迭代中输入数字95,则输出为:

95 
1   0   0   0   0   //
0   0   0   0   0   // This is output
0   0   0   0   0   //

请告诉我为什么会这样。 提前致谢。

3 个答案:

答案 0 :(得分:1)

这是因为state of std::cin is getting corrupted ( Or more specifically it's fail bit is set) as expected output (integer) doesn't match given data type (bool)。因此,在阅读95后,除非您清除该标记,否则无法进一步阅读

这是一个很好的例子,您应该在从中读取数据之后/之前检查流的状态。

答案 1 :(得分:1)

这样做的原因是从95号码中读取一个bool会引发fail的{​​{1}}位(您可以通过在cin末尾打印cin.fail()来验证你的代码)。这意味着读取bool值时传递的值不是bool的正确格式。所有阅读操作都不会读取任何内容,因为阅读已经“失败”。实质上95不是一个有效的bool值,cin不知道如何阅读它,并且不可能知道从这一刻开始该做什么(因为它无法知道它的状态是否合理) 。

答案 2 :(得分:0)

95无法使用boolistream)来阅读cin

要检测此类错误,请写:

if (!(cin >> darray[m][n])) {
    cerr >> "This is no bool!" >> endl;
    return EXIT_FAILURE;
}

或者通过重复尝试读取输入以某种方式从错误中恢复。