-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"
내가 누락 된 문자에 무슨 일이 일어나고 있는지 이해 해달라고. 내가 뭘 잘못하고 있니?
많은 불필요한 코드가 있음을 알 수 있습니까? 'else' 브랜치에서'continue'처럼, 루프는 무엇을할까요? 'continue'에 관계없이 다음 반복으로 갈 것이고,'switch' 문은 단순히 if (mod_a % LINEBREAK == 0) {} else {}'!!!입니다. –
누락 된 문자는 0입니다. "line"을 "XXXXXXXXXXXXXXXXXX ..."로 초기화하면 다음 출력을 얻게됩니다. "thisXXs {newline} a {newline} Xline"(서식 변명 :) – Buster