2014-12-03 1 views
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); 
    } 
} 
+0

if((i>=8) 변화와 함께 시작하고 싶어? –

+1

아마도'i> = 8'을'i> = 7'로 변경하겠습니까? – JS1

+0

이 줄은 : 'main()'은 컴파일러 경고를 발생시킵니다 (모든 경고를 활성화해야합니다). 그러면 코드가 성공적으로 컴파일되지 않았습니다. 참고 : 라인은 'int main()'이어야합니다. main 함수의 잘못된 선언이 있더라도 컴파일러는 누락 된 'return (intValue)'문에 대한 경고를 발생시킵니다. 이 줄에 관한 – user3629249

답변

4

귀하는 off-by-one 오류가 발생했습니다.

배열의 요소 번호 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)) 

결코 그것을 않습니다, array[0] 요소를 확인하지?

아마, 당신은 당신이 많은 불필요한 괄호를 사용하는 이유 if((i>=7)

+1

@ JaleelKibs : 또한 off-by-one 오류를 수정 한 후에 다음 시퀀스가 ​​두 개의 성공적인 시작 시퀀스로 계산되는지 여부를 고려해야합니다. '0 0 0 0 1 1 0 0 0 1 1 0' (I don 이것에 대한 답을 알지 못한다. 이것은 신청서의 요구 사항에 달려있다. 이 답변에서 언급 한 간단한 수정 만하면 첫 번째 시퀀스의 마지막 0이 두 번째 시퀀스의 첫 번째 0으로 사용 되더라도 프로그램은 두 개의 시작 시퀀스로 계산합니다. –

1
this line that checks for the sequence, 
which is probably where the problem is located 
is very difficult to read. 
suggest writing it like so: 

if( (i>=8) 
    && (0 == array[i-1]) 
    && (1 == array[i-2]) 
    && (1 == array[i-3]) 
    && (0 == array[i-4]) 
    && (0 == array[i-5]) 
    && (0 == array[i-6]) 
    && (0 == array[i-7])) 


now that the line is readable, it looks like the array offsets are not correct. 
and when i = 8, then 8 items have been read, 
and the code is only checking the last 7 inputs 
so to not miss the first possible matching sequence: 

I suspect the line should be: 

if( (i>=7) 
    && (0 == array[i-0]) 
    && (1 == array[i-1]) 
    && (1 == array[i-2]) 
    && (0 == array[i-3]) 
    && (0 == array[i-4]) 
    && (0 == array[i-5]) 
    && (0 == array[i-6])) 
관련 문제