Найти ошибку в коде из учебника Керниган и Ритчи - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д