0

以下のコード(KernighanとRitchieによる「Cプログラミング言語」の問題1-17の場合)では、なぜ最長の行(下部)が印刷されないのですか?

#include <stdio.h>
#define MAXLINE 1000
#define LONGLINE 10

int getLineLength(char line[], int maxline){
  int i, c;

  for(i = 0; i< maxline-1 && (c = getchar() != EOF) && c != '\n'; i++)
    line[i] = c;

  if(c == '\n') {
      line[i] = c;
      i++;
  }

  line[i] = '\0';
  return i;
}



main() {
  int len;
  char line[MAXLINE];
  while((len = getLineLength(line, MAXLINE)) > 0)
    if(len > LONGLINE)
      printf("The line was over the maxlength\n\t %s", line);

  return 0;
}
4

3 に答える 3

4

あなたのコードでは:

(c = getchar() != EOF)

これはと評価され(c = (getchar() != EOF))、間違った結果になります。必要なものは次のとおりです。

((c = getchar()) != EOF)
于 2011-03-30T20:00:24.563 に答える
1

このプログラムは、標準入力から読み取り、その長いメッセージを文字より10行長い行に出力します。行は「\n」で終わります(改行、ENTER)。入力は、パイプなどを介してファイルをフィードする場合はEOFで終了し、手動で文字を入力する場合はCTRL-Cで終了します。

于 2011-03-30T19:58:15.410 に答える
0

私はこれがまったく機能することに驚いています。(c = getchar() != EOF)最初は完全に間違っています。line[i] = c;2回表示されます。そして、エッジケースではバッファオーバーフローに対して脆弱だと思います。

編集:私がもう見ることができない以前の答えは、forループから中括弧が欠落しているようだと言っていました。

于 2011-03-30T19:59:55.223 に答える