K&Rを読もう(10) 演習1-16 これでいいのか不明。

世界中を飛び回ってみたけど演習1-16は(世界中で?)評判が悪い。問題の意味が全くわからない。


「プログラミング言語C(第2版)」第一章演習の答え
を参考に書いた。(ほぼコピペ)


バッファがオーバーフローした時は読み飛ばして、1行を取得せよ?

int main(void)
{
    int  len;
    int  max = 0;
    char line[MAX_LENGTH];
    char longest[MAX_LENGTH];
    int c;

    while ((len = getline(line, MAX_LENGTH)) > 0) {
        if (len == MAX_LENGTH - 1 && line[len - 1] != '\n') { // オーバーフロー中
            while((c = getchar()) != EOF) {
                len++;
                if (c == '\n') // ココが正しい位置。
                    break;
            }
        }
        if (len > max) {
            max = len;
            copy(longest, line);
        }
    }
    if (max > 0) {
        printf("%s", longest);
        if (max >= MAX_LENGTH) {
            printf("... %d chars\n", max);
        }
    }

    exit(EXIT_SUCCESS);
}

う〜ん。なんか違う気がするので、世界中から答えを探してほしい(他力本願

main getline copy MAXLINE - Google Search

まんま書いてる人もいるし、全然違うことを書いてる人もいる。

どれが正解なんだぁぁぁ!!

追記

オーバーフロー中のカウンタがおかしかったので、修正した。