2011-04-14 2 views
0

가능한 중복 :
Program not doing what it should - C아마 문제 - C

안녕하세요,

프로그램은 입력에서 숫자를 읽고 rull 위반시 중지합니까 다음,하지만 1 큰 문제는 그것이 숫자를 읽는 것을 멈추지 않으며 더 악화되고, 스크린에 그것이 무엇을해야 하는지를 인쇄하지 않는다는 것입니다.

코드 :

#include <stdio.h> 
#include <string.h> 

void SIFT(int x_arr[ ], int y_arr[]); 

int main() 
{ 
    int x[20] = {0} , y[20] = {0}; 
    int m=0,temp=0,curr=0,i=0,j=0; 

    printf("Please enter your numbers now:\n\n"); 

    /*enter numbers one by one. if x[i+1] value < x[i] value, err msg. 
     when user want to end the series he must enter '0' which means end of string (it wont  included in x[]) */ 
    while ((scanf("%d",&temp)) != '0') 
    { 
     if (temp >= curr) 
     { 
      x[i] = temp; 
      curr = temp; 
      i++; 
     } 
     else 
     { 
      printf("The numbers are not at the right order !\n\nProgram will now terminate...\n\n"); 
     } 
    } 

    SIFT(x,y); 

    for (i=0 ; y[i]=='0' ; i++) /*strlen(y) without ('0')'s includes*/ 
     m++; 

    /*Prints m , y's organs*/ 
    printf("\n\nm = %d",m); 
    printf("Y = "); 
    while (y[j]!='0') 
    { 
     printf ("%d ,",y[j]); 
     j++; 
    } 

return 0; 
} 

void SIFT(int x_arr[ ], int y_arr[]) 
{ 
    int i=0,j=0; 

    while (x_arr[i] != '0') 
    { 
     if (x_arr[i] == x_arr[i+1]) /*if current val. equals next val. -> jump dbl at x_arr*/ 
     { 
      y_arr[j] = x_arr[i]; 
      i+=2; 
      j++; 
     } 
     else 
     { 
      y_arr[j]=x_arr[i]; 
      i++; 
      j++; 
     } 
    }  

} 

나에게이 문제 ... thnx를 해결하는 데 도움이 바랍니다.

+0

거의 동일한 코드이지만 이전 질문과 같은 질문이 아닙니다. – Mat

+0

'scanf ("% d", & temp)' "결과가 2 개"입니다. 하나의 "결과"는 함수의 반환 값입니다. 그렇지 않으면 0 또는 EOF. 다른 "결과"(1이 리턴되었을 때)는 변수'temp' (사용자가 입력 한 값)의 값입니다. (매우 의사 코드)'if (scanf() == 1) {if (temp == 0) ...;}와 같이 "results"를 모두 검사해야합니다. }' – pmg

답변

3

첫 번째 힌트로 scanf은 읽은 항목 수를 반환하므로 (scanf("%d",&temp)) != '0' 조건은 48 개 항목 (ASCII 값이 0)을 읽는 경우에만 적중됩니다. 이 형식 지정자로는 이런 일이 일어나지 않으므로 루프가있는 것입니다.

+1

하지만 나는 기관 수를 세고 싶지는 않습니다. '0'이 나오면 멈춰야합니다 ... –

관련 문제