Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
3 / 3 / 7
Регистрация: 11.09.2015
Сообщений: 24
1

Разобрать пример с символьным массивом

11.09.2015, 14:55. Просмотров 302. Ответов 3
Метки нет (Все метки)

Здравствуйте. Не могу понять кусок из примера, приведенного в Кернигане. Сам пример:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#define MAXLINE 1000    /* max line size */
 
int getline(char line[], char from[]);
void copy(char to[], char from[]);
 
/* print the longest line */
main()
{
    int len;    /* current line length */
    int max;    /* max line length */
    char line[MAXLINE];     /* current line */
    char longest[MAXLINE];  /* longest line */
 
    max = 0;
    while ((len = getline(line, MAXLINE)) > 0)
        if (len > max){
            max = len;
            copy(longest, line);
        }
    if (max > 0)        /*was there at least one line? */
        printf("%s", longest);
    return 0;
}
 
/* getline: get line into s, returns length */
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: copy 'from' in 'to'; 'to' is big enough */
void copy(char to[], char from[])
{
    int i;
 
    i = 0;
    while ((to[i] = from[i]) != '\0')
        ++i;
}
В функции getline не пойму для чего
C
1
2
3
4
if (c == '\n'){
        s[i] = c;
        ++i;
    }
Если убрать этот кусок, то программа по-прежнему работает, с той лишь разницей, что после вывода результата нет перехода на следующую строку. Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.09.2015, 14:55
Ответы с готовыми решениями:

Работа с двумерным символьным массивом
---Здравствуйте. Я хочу на СИ составить массив из строк, в котором запишу несколько слов. Насколько...

Разобрать пример с Getchar и putchar
Помогите понять отличия результатов вывода сего кода: while((c = getchar()), c != EOF) { ...

Побитовые операции - разобрать пример
Доброго времени суток, уважаемые программисты! Помогите разобраться с побитовыми операциями. К...

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

3
55 / 55 / 39
Регистрация: 19.03.2015
Сообщений: 167
11.09.2015, 15:05 2
вы сами ответили на свой вопрос. этот код вставляет в строку символ перевода строки.
0
3 / 3 / 7
Регистрация: 11.09.2015
Сообщений: 24
11.09.2015, 15:10  [ТС] 3
А не проще тогда в main в конце приписать printf("\n") ?
0
55 / 55 / 39
Регистрация: 19.03.2015
Сообщений: 167
11.09.2015, 15:20 4
этот символ является частью вводимой с клавиатуры строки и учитывается в подсчете длины этой строки. так что ваш вариант не проходит.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2015, 15:20

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Разобрать пример обращения к элементу матрицы
Помогите пожалуйста решить такую задачу на C: Необходимо набить двумерный массив строк типа...

Разобрать пример перевода строки в верхний регистр
Всем привет :friends: void print(char *string) { int t; for (t = 0; string; t++)...

Заполнение массива и его запись в файл - разобрать пример
Доброго времени суток. Возникли проблемы с заполнением массива, и я не могу понять чем они вызваны....

Рекурсия с символьным массивом
Здраствуйте! Не получается справиться с заданием, хотя вроде все делаю правильно. Подскажите - что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.