Насчет ошибки expected ',' or '.' before numeric constant в K&R - C (СИ)

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

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

учу по K&R потихоньку, для компиляции использую QT (Qt Creator 3.2.1 (opensource) Based on Qt 5.3.2 (GCC 4.6.1, 64 bit)) разбираясь с задачей 1.9 перепечатал ее в оригинале, но программа отказывается компилироваться. Ознакомившись с форумом я понял что местные говорят что КОНСТАНТА НЕ МОЖЕТ БЫТЬ ИДЕНТИФИКАТОРОМ ПАРАМЕТРА функции, странное расхождение с Ричи хочу спросить, а почему тогда эта же константа идентификатор параметра переменных которые мы задаем в main? и почему Ричи предлогает именно такую конструкцию? даже сделав как советуют камрады int getline (char line[], int); я получаю ошибку в 25 строке где уже объявляю функцию getline
#include <stdio.h>
 
#define MAXLINE 256 //макс размер вводимой строки
 
int getline (char line[], int);
void copy (char to[], char from[]);
 
//печать самой длинной строки
main()
{
    int len,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 и возвращает ее длину
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
void copy (char to[], char from[])
{
    int i = 0;
    while ((to[i] = from[i]) != '\0')
        ++i;
}

Решение задачи: «Насчет ошибки expected ',' or '.' before numeric constant в K&R»

textual
Листинг программы
#include <stdio.h>
#define MAXLINE 1000 /*максимальный размер вводимой строки*/
 
int getline_max(char line[], int MAXLINE);
void copy_max(char to[], char from[]);
 
main()
{
    int len; /* длина текущей строки */
    int max; /* длина максимальной из просмотренных строк */
    char line[MAXLINE]; /* массив текущей строки */
    char longest[MAXLINE]; /* массив самой длинной строки */
    max = 0;
    while ((len = getline_max(line, MAXLINE)) > 0)
        if (len > max){
            max = len;
            copy_max(longest, line);
        }
    if (max > 0) /* была ли хоть одна строка? */
        printf("%s", longest);
    return 0;
}
 
 
/* getline: читает строку в s, возвращает длину */
int getline_max(char s[], int lim)
{
    int c, i;
    for (i = 0; i < lim-1 && ((c = getchar()) != '\n') && c != EOF; ++i)
        s[i] = c;
    if (c == '\n') {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}
 
/* copy: копирует из 'from' в 'to'; to достаточно большой */
void copy_max(char to[], char from[])
{
    int i;
    i = 0;
    while ((to[i] = from[i]) != '\0')
        ++i;
}

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

15   голосов , оценка 4 из 5
Похожие ответы