1

私はK&Rを使用しており、80文字を超えるすべての入力行を出力するプログラムを作成しようとしました。ターミナルからプログラムを実行すると、何も返されません。どこが間違っているのか誰か教えてもらえますか?また、私が確信していない部分の1つは、線s[i] = '\0';です。誰かがこれが何をするのか説明してもらえますか?

#include <stdio.h>
#define MAXLINE 1000
#define LENGTH 80

int get_line(char line[], int maxline);

/* program to print all lines longer than 80 characters */
main()
{
    int len;    /*current line length*/
    char line[MAXLINE]; /*current input line*/

    while((len = get_line(line, MAXLINE)) > 0)  /*while length of the line is greater than zero*/
            if (len > LENGTH) { /*if the length is greater than 80*/
                    printf("%s", line); /*print that line*/
                    return 0;               
            }
}

/* getline: read a line into s, return length */
int get_line(char s[], int lim)
{
    int c, i;

        for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i) /*if i is < 1000 & input is = EOF & input is != newline add one*/
            s[i] = c;   /*assign a value to each character*/
    if (c == '\n') {                            
            s[i] = c;
            ++i;
    }
    s[i] = '\0';    /*unsure what '\0' does*/               
    return i;   /*return the length*/
}
4

2 に答える 2

2

コードで見られる唯一の問題は、80 文字を超える長さの最初の行を印刷した直後に停止することです。

を移動すると

return 0;

if ステートメントの外では、最初の行だけでなく、80 文字を超えるすべての行が出力されます。

あなたの「主な」方法は次のようになります

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

    while((len = get_line(line, MAXLINE)) > 0)              /*while length of the line is greater than zero*/
            if (len > LENGTH)                    /*if the length is greater than 80*/
                    printf("%s", line);                 /*print that line*/

    return 0;
}

他の人が指摘したように、'\0' 文字は C 文字列の終端です。

于 2012-08-23T20:02:54.877 に答える
1

この線

s[i] = '\0';

文字列にヌルターミネータを追加します。これは、文字列の終わりを示すC-ismです。

あなたの問題に関しては、このプログラムは私にとってはうまく機能します。

$ cat line80.c | ./line80
  while((len = get_line(line, MAXLINE)) > 0)              /*while length of the line is greater than zero*/

$ ./line80 < line80.c
  while((len = get_line(line, MAXLINE)) > 0)              /*while length of the line is greater than zero*/
于 2012-08-23T19:50:16.513 に答える