C 如果条件不成功

C 如果条件不成功,c,if-statement,input,while-loop,off-by-one,C,If Statement,Input,While Loop,Off By One,我的函数在遇到任何问题时都应该有一个成功的启动序列 0 0 0 0 1. 1. 0 但当我输入这些数字时,成功启动序列的数量不会改变 然而,这并不能阻止它的编译,我也看不出我犯的错误在哪里 main() { int i,num; int array[300]; i=0; num=0; while(i<100) { scanf("%d",&array[i]); //input i++;

我的函数在遇到任何问题时都应该有一个成功的启动序列 0 0 0 0 1. 1. 0 但当我输入这些数字时,成功启动序列的数量不会改变 然而,这并不能阻止它的编译,我也看不出我犯的错误在哪里

main()

{
    int i,num;
    int array[300];
    i=0;
    num=0;
    while(i<100)
    {
        scanf("%d",&array[i]); //input


        i++;
        //checks for start sequences while making sure there is atleast 8 numbers input
        if((i>=8)&&((array[i-1])==0)&&((array[i-2])==1)&&((array[i-3])==1)&&((array[i-4])==0)&&     ((array[i-5])==0)&&((array[i-6])==0)&&((array[i-7])==0))
        {
            num++;//counts the number of successful startsequences

        }
    printf("Number of valid start sequences is %d\n",num);
    }
}
main()
{
int i,num;
int数组[300];
i=0;
num=0;
而(i=8)&((数组[i-1])==0)&((数组[i-2])==1)&((数组[i-3])==1)&((数组[i-4])==0)&((数组[i-5])==0)&((数组[i-6])==0)&((数组[i-7])=0)
{
num++;//计算成功启动序列的数量
}
printf(“有效启动序列的数量为%d\n”,num);
}
}
您面临错误

请记住,数组中的元素编号
n
由索引
n-1
标记

比如说,

if((i>=8)&&((array[i-1])==0)&&((array[i-2])==1)&&((array[i-3])==1)&&((array[i-4])==0)&&     ((array[i-5])==0)&&((array[i-6])==0)&&((array[i-7])==0))
从不检查数组[0]元素,是吗

也许,您需要先将
if((i>=8)
更改为
if((i>=7)
您面临错误

请记住,数组中的元素编号
n
由索引
n-1
标记

比如说,

if((i>=8)&&((array[i-1])==0)&&((array[i-2])==1)&&((array[i-3])==1)&&((array[i-4])==0)&&     ((array[i-5])==0)&&((array[i-6])==0)&&((array[i-7])==0))
从不检查数组[0]元素,是吗


也许,您想先将
if((i>=8)
更改为
if((i>=7)

为什么要使用那么多多余的括号?也许将
i>=8
更改为
i>=7
?这一行:'main()'将引发编译器警告(您应该启用所有警告),因此代码未能成功编译。注意:即使主函数的声明不正确,编译器也会对缺少的“return(intValue)”语句发出警告。关于这一行:scanf(“%d”,&array[i]);1)格式字符串需要一个前导“”,因此stdin缓冲区中的任何空白都会被占用。否则,第二次通过循环(可能)会失败。2)任何输入函数(scanf)返回的值需要进行检查,以确保操作正常successful@JaleelKibs请检查如何找到对您有帮助的答案。为什么要使用那么多多余的括号?可能将
i>=8
更改为
i>=7
?此行:“main()”将引发编译器警告(您应该启用所有警告),因此代码未能成功编译。注意:即使主函数的声明不正确,编译器也会对缺少的“return(intValue)”语句发出警告。关于这一行:scanf(“%d”,&array[i]);1)格式字符串需要一个前导“”,因此stdin缓冲区中的任何空白都会被占用。否则,第二次通过循环(可能)会失败。2)任何输入函数(scanf)返回的值需要进行检查,以确保操作正常successful@JaleelKibs请检查如何帮助你的答案。@ JaleelkiBs:同样,在你修正了一个错误之后,考虑下面的序列是否应该算为两个成功的启动序列或不:<代码> 0、0、0、1、1、0、0、0、0、1、1、1、/代码>(我不知道这个问题的答案——这取决于你申请的要求)如果你只做了这个答案中提到的简单的修正,那么你的程序会把它当作两个开始序列,即使第一个序列的最后一个零被用作第二个序列的第一个零点。@ JaleelkiBs:同样,在你修正了一个错误之后,考虑下面的序列是否应该算为两个成功的启动序列。或者不:
0 0 0 0 0 1 0 0 0 0 1 0
(我不知道这个问题的答案-这取决于你的应用程序的要求)。如果你只做这个答案中提到的简单修复,那么你的程序将把它作为两个开始序列来计算,即使第一个序列的最后一个零被用作第二个序列的第一个零。