2016-08-02 4 views
1

아래 코드에 대해 작성하기 위해 C 배열을 사용하려고했습니다.
나는 =>I am a boy.
원하는 출력은 여기 =>boy a am I.
입니다 아래에있는 내 코드이며이 작동하지 않습니다에 들어갔을 때.
내가 2 일 동안 버그를 발견하고 다른 사람이 지적 코드로 여러 문제가있는 것처럼 난 여전히 문제를C에 대한 단어 역순

int i,j,k,m,start,temp_end,len; 
char str[30]; 
gets(str); 

len=strlen(str); 
temp_end=len-1; 

for(k=len;k>0;k--) 
{ 
    if(str[k]==" ") 
     start=k; 
    for(j=start+1;j<temp_end;j++) 
    { 
     printf("%c",str[j]); 
    } 
    printf(" "); 
    temp_end=k; 
} 
for(m=0;m<temp_end;m++) 
{ 
    printf("%2c.",str[m]); 
} 
+0

'if (str [k] == "")'에서 문제는''''는 문자열이 아니라 문자입니다. 'if (str [k] == ')'를 대신 사용해보십시오. – user3386109

+1

"작동하지 않습니다". 그럼 어떻게합니까? 문제를 찾는데 도움이되는 디버거를 사용해 보셨습니까? 그러나 우선 str [k]는'char'이지만''('')''는 문자열이므로 if (str [k] == "")'가 잘못되었습니다. – kaylum

+0

죄송합니다. 내 말을 바꿔야합니다. – Hardy

답변

1

를 찾을 수 없습니다. 조건 if(str[k]==" ")에서

  1. , 당신은 잘못 하나의 공백 문자를 표현하기 위해 " "을 사용하고 있습니다. 단일 공백 ​​문자의 경우 ' '을 사용해야합니다. " "은 공백 문자가 하나 인 string입니다.

  2. 매번 for(j=start+1;j<temp_end;j++) { … } 루프를 실행하고 있습니다. 그러나 이것은 새로운 공간 인 ' '이있는 경우에만 실행해야합니다. 이를 위해 플래그를 사용할 수 있습니다. printf(" ");과 동일하고 temp_end = k;

  3. printf("%2c.", str[m])은 오타처럼 보입니다. 왜 %2c.일까요? 그냥 "%c" 일을해야합니다. 또한



    /* Use a flag to know when to print */ 
        /* 0 means don't print, 1 means print */ 
        int pflag = 0; 
    
        for(k = len-1; k >0; k--) 
        { 
          if(str[k]==' ') { 
            pflag = 1; /* new space found, update the flag to print */ 
            start=k; 
          } 
          if (pflag == 1) /* check flag to see if print needed */ 
          { 
            for(j=start+1;j<temp_end;j++) 
            { 
              printf("%c",str[j]); 
            } 
            printf(" "); 
            temp_end=k; 
            pflag = 0; /* reset flag after printing */ 
          } 
        } 
    
        for(m=0;m<temp_end;m++) 
        { 
          printf("%c",str[m]); 
        } 
    

gets()를 사용하지 마십시오. fgets() 또는 다른 것을 사용하십시오.