试图找出K& R C ex 1-22

时间:2016-11-05 10:56:46

标签: c

Noob再次来到这里。我试图回答第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"

我不明白丢失的角色发生了什么。 请问我做错了什么?

1 个答案:

答案 0 :(得分:0)

您需要为每个计数值设置line[count]。您的代码在line[count]时无法设置a % LINEBREAK == 0