2

私はこの本を読んでいて、第 1 章からテストする方法がわからないいくつかの例に出くわしました。行を読んでさまざまな文字を探しますが、作成した C のコードをテストする方法がわかりません。 .

例えば:

/* K&R2: 1.9, Character Arrays, exercise 1.17

STATEMENT:
write a programme to print all the input lines
longer thans 80 characters. 
*/
<pre>
#include<stdio.h>

#define MAXLINE 1000
#define MAXLENGTH 81

int getline(char [], int max);
void copy(char from[], char to[]);

int main()
{
  int len = 0; /* current line length */
  char line[MAXLINE]; /* current input line */

  while((len = getline(line, MAXLINE)) > 0)
{
  if(len > MAXLENGTH)
printf("LINE-CONTENTS:  %s\n", line);
}

return 0;
}
int getline(char line[], int max)
{
int i = 0; 
int c = 0; 

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

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

 line[i] = '\0';

 return i;
} 

これをテストするために、さまざまな行の長さのファイルを作成する方法がわかりません。いくつかの調査を行った後、誰かがこの方法で試しているのを見ました:

[arch@voodo kr2]$ gcc -ansi -pedantic -Wall -Wextra -O ex_1-17.c
[arch@voodo kr2]$ ./a.out 
like htis
and
this line has more than 80 characters in it so it will get printed on the terminal right
now without any troubles. you can see for yourself
LINE-CONTENTS:  this line has more than 80 characters in it so it will get printed on the
terminal right now without any troubles. you can see for yourself
but this will not  get printed
[arch@voodo kr2]$ 

しかし、彼がそれをどのように管理しているかはわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

2

そのプログラムは標準入力を読み取ります。その例に示されているとおりに入力すると、同じ出力が表示されます。a を入力し^Dて、プログラムを終了します。

于 2012-10-21T05:49:30.097 に答える
2
for(i = 0; ((c = getchar()) != EOF) && c != '\n' && i < max - 1; ++i) 

これは、getline() 関数について知っておく必要があるすべてのことを示している行です。

文字ごとに読み取り、次の状態になるまで配列に格納します。

  1. ターミナルで ^D(linux)/^Z(win) を押さない(^ = コントロール)
  2. キーボードの「Enter」キーを押さない
  3. 入力する文字数は を超えてはなりませんmax - 1。そうしないと、コピーされません。あなたの例では最大= 1000であるため、999文字しか入力されません。
于 2012-10-21T05:59:34.770 に答える