Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

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

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

ну куда тут подробнее. ты задал 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
По умолчанию

На самом деле тело цикла выполнится 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
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните Sergo(1) Помощь студентам 2 10.05.2009 22: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