Керниган Ритчи Глава 1.9 символьные массивы - C (СИ)

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

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

В главе 1.9 символьные массивы Керниган Ричи не понятно для чего нужны и как работают выделенные строки. Сама программа находит самую длинную вводимую строку и печатает её
#include <stdio.h>
#include <stdlib.h>
#define MAXLINE 100
int getline(char s[],int lim);
void copy (char to[], char from[]);
 
int 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\n",longest); 
  system("PAUSE");  
  return 0;
}           

  int getline(char s[],int lim)
  {
  int c,i;
  for(i=0;(i<lim-1)&&((c=getchar())!=EOF)&&(c!='\n');++i)
  s[i]=c;
[COLOR="Red"]  if (c=='\n')
  {
  s[i]=c;
  i++;
  }
  s[i]='\0'; [/COLOR] Программа и без этих строк работает. Для чего нужно? Как работает?
  return i;  
  }
  
  [COLOR="red"]void copy (char to[], char from[])
  {
  int i;
  i=0;
  while((to[i]=from[i])!='\0')
  ++i;     [/COLOR] Ну тут я вообще не понял. Ну присваивает массиву to(аргумент - массив longest) значение массива from(аргумент - массив line). Но в функции main печатает же longest. Каким образом to==longest. Ведь в предыдущей главе 1.8 сказано что [I]"в СИ вызываемая функция (т.е. getline) не может непосредственно изменить переменную(т.е. longest) вызывающей функции(т.е. main): она может изменить только её частную, временную копию."[/I]
  }

Решение задачи: «Керниган Ритчи Глава 1.9 символьные массивы»

textual
Листинг программы
if (c=='\n')// если цикл закончился вводом "Энтер"
   {
    s[i]=c;// занесем его тоже в строку
     i++; // увеличим индекс

Объяснение кода листинга программы

  1. Проверяется условие, что символ равен символу новой строки '\n'.
  2. Если условие выполняется, то выполняется блок кода:
    • Символ новой строки '\n' записывается в строку s[i].
    • Индекс i увеличивается на 1.

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


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

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

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