Насчет ошибки 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;
}