Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 30.06.2009, 12:31   #1
stenl1
Форумчанин
 
Аватар для stenl1
 
Регистрация: 26.06.2009
Сообщений: 354
По умолчанию объясните цикл

дан цикл:
Код:
int getline (char s[],int lim)
{
int c,i;
for(i=0; i<lim-1 && (c=getline() ) !=eof && c != '\n'; i++ )
s[i]=c;
s[i]='\0';
i++;
return (i);
}
Объясните почему в for(i=0; i<lim-1 && (c=getline() ) !=eof && c != '\n'; i++ )
пишиться i<lim-1 ,неясно для чего нужна эта -1.
stenl1 вне форума Ответить с цитированием
Старый 30.06.2009, 12:38   #2
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

Цитата:
неясно для чего нужна эта -1.
потому что ты цикл начинаешь от нуля
vvviperrr вне форума Ответить с цитированием
Старый 30.06.2009, 12:48   #3
stenl1
Форумчанин
 
Аватар для stenl1
 
Регистрация: 26.06.2009
Сообщений: 354
По умолчанию

Объясни пожалуйста по подробней.
stenl1 вне форума Ответить с цитированием
Старый 30.06.2009, 12:52   #4
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

ну куда тут подробнее. ты задал Limit = 5, цикл ты начинаешь с нуля, если ты не сделаешь -1, он у тебя выполнится 0 1 2 3 4 5 итетаций, т.е 6 раз, а тебе надо 5. можно начинать с единицы, но т.к тебе удобно использовать эту переменную дальше (в массиве символов), то тебе удобнее начинать с нуля, чем с единицы, т.к индексация массивов начинается с нуля. вывод - отнять единицу от lim
vvviperrr вне форума Ответить с цитированием
Старый 30.06.2009, 15:58   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

На самом деле тело цикла выполнится 4 раза (если lim=5)
Там ведь условие выхода - строго меньше lim-1.
Поэтому будет 0 1 2 3, а 4 уже не подойдет.
А -1 тут скорее всего нужно для того, чтобы после цикла последнему символу (s[lim-1]) присвоить символ конца строки:
Код:
s[i]='\0';
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 30.06.2009, 16:06   #6
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

2Sazary действительно, на знак не посмотрел)
vvviperrr вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните Sergo(1) Помощь студентам 2 10.05.2009 21:46
Объясните!!! Dawystrik Общие вопросы Delphi 1 20.03.2009 12:07
объясните код Rend1 Общие вопросы Delphi 18 01.02.2008 14:52
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS