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
まんま書いてる人もいるし、全然違うことを書いてる人もいる。
どれが正解なんだぁぁぁ!!
追記
オーバーフロー中のカウンタがおかしかったので、修正した。