-2
再次嘗試這裏。我想回答第1章的第22次練習,我想我被卡住了。試圖找出K&R C ex 1-22
練習是在最後一個非空白字符後創造性地摺疊一長行,但我所做的是吃掉字符串中的一些字符。
繼承人我的代碼:
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 {}'!!! –
缺少的字符是零;如果你初始化「line」爲「XXXXXXXXXXXXXXXXXX ...」,你會得到輸出: 「thisXXs {newline} a {newline} Xline」(原諒格式:) – Buster