Найти ошибку в коде из учебника Керниган и Ритчи - C (СИ)

Узнай цену своей работы

Формулировка задачи:

В тексте книги написан такой код
#include <stdio.h>
#define MAXLINE 1000 /* максимальный размер вводимой строки */
int getline(char linef], int MAXLINE);
void copy(char to[], char fromf]);
/* печать самой длинной строки */
main()
{
int len; /* длина текущей строки */
int max; /* длина максимальной из просмотренных строк */
char line[MAXLINE]; /* текущая строка */
char longest[MAXLINE]; /* самая длинная строка */
max = 0;
while ((len = getline(line, MAXLINE)) > 0)
if (len > max) {
max = len;
copy(longest, line);
}
if (max > 0) /* была ли хоть одна строка? */
printf("%s", longest);
return 0;
}
/* getline: читает строку в s, возвращает длину */
int getline(char s[], int lim)
{
int c, i;
for (i = 0; i < lim-1 && (c = getchar()) != EOF && с != '\n'; ++i)
s[i] = c;
if (c == 'n'; {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
/* copy: копирует из 'from' в 'to'; to достаточно большой */
void copy(char to[], char from[])
{
int i;i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}
Но в нём на мой взгляд ошибки со скобками и видимо что то ещё. Я немного подправил скобочки и вот что вышло
#include <stdio.h>
 
#define MAXLINE 1000 /*максимальный размер вводимой строки*/
/*----------------объявление функций----------------*/
int getline(char linef[], int MAXLINE);
void copy(char to[],char fromf[]);
/*--------------------------------------------------*/
/*печать самой длинной строки*/
main()
{
    int len; //длина текущей строки
    int max = 0 ; //длина максимальной из просмотренных строк
    char line[MAXLINE]; //текущая строка
    char longest[MAXLINE]; //самая длинная строка
    
    while((len = getline(line, MAXLINE)) > 0 )
        if (len > max) {
            max = len;
            copy(longest, line);
        }
    if(max > 0) //была ли хоть одна строка
        printf ("%s", longest) ;
    return 0;       
}
/*--------------------------------------------------------------------------------------------------------*/
/* getline: читает строку в s, возвращает длину*/
int getline(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: копирует из 'from' в 'to' ; to достаточно большой */
void copy(char to[],char from[])
{
    int i;
    i = 0;
    while ((to[i] = from[i]) != '\0')
        ++i;
}
А при компиляции ругается на константу и от нее зависимое. Никак не могу понять, что с ней не так?
les.c:4:17: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant #define MAXLINE 1000 /*максимальный размер вводимой строки*/ ^ les.c:6:31: note: in expansion of macro ‘MAXLINE’ int getline(char linef[], int MAXLINE); ^ les.c: In function ‘main’: les.c:17:2: warning: passing argument 1 of ‘getline’ from incompatible pointer type [enabled by default] while((len = getline(line, MAXLINE)) > 0 ) ^ In file included from les.c:2:0: /usr/include/stdio.h:678:20: note: expected ‘char ** __restrict__’ but argument is of type ‘char *’ extern _IO_ssize_t getline (char **__restrict __lineptr, ^ les.c:17:2: warning: passing argument 2 of ‘getline’ makes pointer from integer without a cast [enabled by default] while((len = getline(line, MAXLINE)) > 0 ) ^ In file included from les.c:2:0: /usr/include/stdio.h:678:20: note: expected ‘size_t * __restrict__’ but argument is of type ‘int’ extern _IO_ssize_t getline (char **__restrict __lineptr, ^ les.c:17:2: error: too few arguments to function ‘getline’ while((len = getline(line, MAXLINE)) > 0 ) ^ In file included from les.c:2:0: /usr/include/stdio.h:678:20: note: declared here extern _IO_ssize_t getline (char **__restrict __lineptr, ^ les.c: At top level: les.c:28:5: error: conflicting types for ‘getline’ int getline(char s[], int lim) ^ In file included from les.c:2:0: /usr/include/stdio.h:678:20: note: previous declaration of ‘getline’ was here extern _IO_ssize_t getline (char **__restrict __lineptr,

Решение задачи: «Найти ошибку в коде из учебника Керниган и Ритчи»

textual
Листинг программы
int getline(char linef[], int MAXLINE);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5