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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

icq: 421975621
По умолчанию объясните цикл

дан цикл:
Код:
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, 13:38   #2
vvviperrr
Тупой студент
Участник клуба
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
Репутация: 240
По умолчанию

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

icq: 421975621
По умолчанию

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


10:12.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.