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

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

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

В тексте книги написан такой код
Листинг программы
  1. #include <stdio.h>
  2. #define MAXLINE 1000 /* максимальный размер вводимой строки */
  3. int getline(char linef], int MAXLINE);
  4. void copy(char to[], char fromf]);
  5. /* печать самой длинной строки */
  6. main()
  7. {
  8. int len; /* длина текущей строки */
  9. int max; /* длина максимальной из просмотренных строк */
  10. char line[MAXLINE]; /* текущая строка */
  11. char longest[MAXLINE]; /* самая длинная строка */
  12. max = 0;
  13. while ((len = getline(line, MAXLINE)) > 0)
  14. if (len > max) {
  15. max = len;
  16. copy(longest, line);
  17. }
  18. if (max > 0) /* была ли хоть одна строка? */
  19. printf("%s", longest);
  20. return 0;
  21. }
  22. /* getline: читает строку в s, возвращает длину */
  23. int getline(char s[], int lim)
  24. {
  25. int c, i;
  26. for (i = 0; i < lim-1 && (c = getchar()) != EOF && с != '\n'; ++i)
  27. s[i] = c;
  28. if (c == 'n'; {
  29. s[i] = c;
  30. ++i;
  31. }
  32. s[i] = '\0';
  33. return i;
  34. }
  35. /* copy: копирует из 'from' в 'to'; to достаточно большой */
  36. void copy(char to[], char from[])
  37. {
  38. int i;i = 0;
  39. while ((to[i] = from[i]) != '\0')
  40. ++i;
  41. }
Но в нём на мой взгляд ошибки со скобками и видимо что то ещё. Я немного подправил скобочки и вот что вышло
Листинг программы
  1. #include <stdio.h>
  2. #define MAXLINE 1000 /*максимальный размер вводимой строки*/
  3. /*----------------объявление функций----------------*/
  4. int getline(char linef[], int MAXLINE);
  5. void copy(char to[],char fromf[]);
  6. /*--------------------------------------------------*/
  7. /*печать самой длинной строки*/
  8. main()
  9. {
  10. int len; //длина текущей строки
  11. int max = 0 ; //длина максимальной из просмотренных строк
  12. char line[MAXLINE]; //текущая строка
  13. char longest[MAXLINE]; //самая длинная строка
  14. while((len = getline(line, MAXLINE)) > 0 )
  15. if (len > max) {
  16. max = len;
  17. copy(longest, line);
  18. }
  19. if(max > 0) //была ли хоть одна строка
  20. printf ("%s", longest) ;
  21. return 0;
  22. }
  23. /*--------------------------------------------------------------------------------------------------------*/
  24. /* getline: читает строку в s, возвращает длину*/
  25. int getline(char s[], int lim)
  26. {
  27. int c, i;
  28. for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
  29. s[i] = c;
  30. if (c == 'n') {
  31. s[i] = c;
  32. ++i;
  33. }
  34. s[i] = '\0';
  35. return i;
  36. }
  37. /*----------------------------------------------------------------------------------------------------*/
  38. /* copy: копирует из 'from' в 'to' ; to достаточно большой */
  39. void copy(char to[],char from[])
  40. {
  41. int i;
  42. i = 0;
  43. while ((to[i] = from[i]) != '\0')
  44. ++i;
  45. }
А при компиляции ругается на константу и от нее зависимое. Никак не могу понять, что с ней не так?
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
Листинг программы
  1. int getline(char linef[], int MAXLINE);

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут