Керниган Ритчи Глава 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++; // увеличим индекс
Объяснение кода листинга программы
- Проверяется условие, что символ равен символу новой строки '\n'.
- Если условие выполняется, то выполняется блок кода:
- Символ новой строки '\n' записывается в строку s[i].
- Индекс i увеличивается на 1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д