URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5578
[ Назад ]

Исходное сообщение
"Почему не работает пример из книги"

Отправлено kom , 18-Июл-06 18:12 
Помогите плиз, почему у меня не работает эта программа
книга ЯЗЫК С Б.В. Керниган, Д.М. Ричи .

#define eof -1
#define  maxline  1000 /* maximum input
       line size */
main()  /* find longest line */
{
int len; /* current line length */
int max; /* maximum length seen so far */
char line[maxline]; /* current input line */
char save[maxline]; /* longest line, saved */

max = 0;
while ((len = getline(line, maxline)) > 0)
     if (len >  max) {
    max = len;
    copy(line, save);
     }
     if (max > 0)   /* there was a line */
    printf("%s", save);
}
getline(s,lim) /* get line into s,return length */
char s[];
int lim;
{
    int c, i;

    for(i=0;i<lim-1 && (c=getchar())!=eof && c!='\n';++i)
    s[i] = c;
    if (c == '\n')  {
  s[i] = c;
  ++i;
    }
    s[i] = '\0';
    return(i);
}

copy(s1, s2)    /* copy s1 to s2;
               assume s2 big enough */
char s1[], s2[];
{
int i;

i = 0;
while ((s2[i] = s1[i]) != '\0')
    ++i;
}
      


Содержание

Сообщения в этом обсуждении
"Почему не работает пример из книги"
Отправлено vnp , 19-Июл-06 00:17 
>Помогите плиз, почему у меня не работает эта программа
>книга ЯЗЫК С Б.В. Керниган, Д.М. Ричи .

Не мешало бы пояснить, как она не работает...


"Почему не работает пример из книги"
Отправлено phpcoder , 19-Июл-06 06:20 
>#define eof -1

Это можно не определять и использовать EOF из stdio.h

> main()  /* find longest line */

int main(int argc, char *argv[])

Также, перед использованием ф-ии getline() и copy() нужно их объявить явно или использовать прототип:

int getline(char s[], int lim);
void copy(char s1[], char s2[]);

> getline(s,lim) /* get line into s,return length */
> char s[];
> int lim;

int getline(char s[], int lim)

>    for(i=0;i<lim-1 && (c=getchar())!=eof && c!='\n';++i)

Вы используете getchar() из стандартной библиотеки, а занечит должны подключить файл stdio.h

> copy(s1, s2)    /* copy s1 to s2;
>            
>   assume s2 big enough */
> char s1[], s2[];

void copy(char s1[], char s2[])


Это то что бросилось в глаза с первого взгляда. Исправьте это и, если не будет работать, то пожалуйста приведите также сообщение с ошибками -- так нам будет легче вам помочь. (потому что телепаты всё ещё в отпуске ;)) )



"Почему не работает пример из книги"
Отправлено kom , 19-Июл-06 10:45 
>Это то что бросилось в глаза с первого взгляда. Исправьте это и,
>если не будет работать, то пожалуйста приведите также сообщение с ошибками
>-- так нам будет легче вам помочь. (потому что телепаты всё
>ещё в отпуске ;)) )
хм... эта программа из книги как я и выше написал книга "ЯЗЫК С" Б.В. Керниган, Д.М. Ричи
программа компилиться без ошибок, но сама программа не работает, я просто не очень разбираюсь в "си" так как начал изучать, но думаю программа виснит в каком то условии



"Почему не работает пример из книги"
Отправлено phpcoder , 19-Июл-06 11:40 
>но думаю программа виснит в каком то условии

Это хороший повод для вас познакомиться с отладчиком gdb ;-))



"Почему не работает пример из книги"
Отправлено Мимо проходил , 19-Июл-06 12:47 
>>Это то что бросилось в глаза с первого взгляда. Исправьте это и,
>>если не будет работать, то пожалуйста приведите также сообщение с ошибками
>>-- так нам будет легче вам помочь. (потому что телепаты всё
>>ещё в отпуске ;)) )
>хм... эта программа из книги как я и выше написал книга "ЯЗЫК
>С" Б.В. Керниган, Д.М. Ричи
>программа компилиться без ошибок, но сама программа не работает, я просто не
>очень разбираюсь в "си" так как начал изучать, но думаю программа
>виснит в каком то условии

вы так и не пояснили - как она не работает..
по идее, если вы вместо ввода новой строки просто нажмёте Ctrl-D (eof),
она напечатает строку и завершится. То есть завешение программы - enter,Ctrl-d