2016-11-05 2 views
-2

예를 들어 여기서 다시 시도하십시오. 나는 제 1 장의 22 번째 운동에 답하려고 노력하고 있으며 나는 갇혀 있다고 생각한다.K & R C ex 1-22

연습은 마지막 비 공백 문자 다음에 긴 줄을 접어 구부리는 것이지만, 내가 한 것은 문자열의 일부 문자를 먹는 것입니다.

Heres는 내 코드 :

int folder(char line[], int limit) 
{ 
    int count = 0; 
    int c, a, mod_a; 
    mod_a = 0; 
    a = 0; 

    while((c = getchar()) != EOF && c != '\n' && count < limit - 1) 
    { 
     ++a; 
     mod_a = a % LINEBREAK; 

     switch(mod_a){ 
      case 0: 
       while(a >= count - LINEBREAK + 1) 
       { 
        --a; 
        if(line[a] == ' ' || line[a] == '\t') 
        { 
         line[a] = '\n'; 
        } 
        else 
         continue; 
       } 
       a = count; 
       break; 
      default: 
       line[count] = c; 
       break; 
     } 
     ++count; 
    } 

    line[count + 1] = '\0'; 

    printf("\""); 
    for(int each = 0; each < count; ++each) 
     printf("%c", line[each]); 
    printf("\""); 
    printf("\n"); 

    return count; 
} 

내가 LINEBREAK = 5를 선택

, 나는 다음과 같은 얻을 :

./ex1-22 
this is a line 
"thiss 
a 
ine" 

내가 누락 된 문자에 무슨 일이 일어나고 있는지 이해 해달라고. 내가 뭘 잘못하고 있니?

+0

많은 불필요한 코드가 있음을 알 수 있습니까? 'else' 브랜치에서'continue'처럼, 루프는 무엇을할까요? 'continue'에 관계없이 다음 반복으로 갈 것이고,'switch' 문은 단순히 if (mod_a % LINEBREAK == 0) {} else {}'!!!입니다. –

+0

누락 된 문자는 0입니다. "line"을 "XXXXXXXXXXXXXXXXXX ..."로 초기화하면 다음 출력을 얻게됩니다. "thisXXs {newline} a {newline} Xline"(서식 변명 :) – Buster

답변

0

모든 count 값에 대해 line[count]을 설정해야합니다. a % LINEBREAK == 0 일 때 코드가 line[count]으로 설정되지 않았습니다.