Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > как взять значение из цикла


Автор: epselon 26.5.2008, 00:12
допустим имеется цикл for(int n =0;n<10;n++)
{
   v=v+1;
}
как сделать так чтобы при каждом прохождении цикла - новое значение v сколько нужно раз записывалось в массив.

Автор: mes 26.5.2008, 00:18
Цитата(epselon @  26.5.2008,  00:12 Найти цитируемый пост)
как сделать так чтобы при каждом прохождении цикла - новое значение v сколько нужно раз записывалось в массив

сколько нужно раз - это сколько?

не понял смысла вопроса..может это имелось ввиду?

Код

int mas[10];
for(int n =0;n<10;n++)
{
     mas[n] =v+1;
}

Автор: epselon 26.5.2008, 00:23
mes
а в результате получится 
mas[10] ={1,2,3,4,5,..} ?

Автор: mes 26.5.2008, 00:36
Цитата(epselon @  26.5.2008,  00:23 Найти цитируемый пост)
mas[10] ={1,2,3,4,5,..} ? 

тогда так :
Код

int mas[10];
for(int n =0;n<10;n++)
{
     mas[n] =n+1;
}


Автор: yngwie19 15.6.2008, 09:46
Код


int mas[10], n, v;

for(n=0;n<10;n++)
{
     v=n+1;
     mas[n]=v;
}

Автор: anatox91 15.6.2008, 10:44
можно короче
Код

int mas[10], i;
for(i=1; i <=10;) mas[i-1] = i++; 

 smile 

Автор: IKM2007 15.6.2008, 11:30
И еще короче
Код

for(int mas[10],i=1;i<=10;mas[i-1]=i++);

 smile 

Автор: JackYF 15.6.2008, 11:34
Цитата(anatox91 @  15.6.2008,  09:44 Найти цитируемый пост)
for(i=1; i <=10;) mas[i-1] = i++; 

Небезопасная строка. Что выполнится раньше: (i-1) или (i++) ? smile

Автор: IKM2007 15.6.2008, 11:48
Цитата(JackYF @  15.6.2008,  11:34 Найти цитируемый пост)
Небезопасная строка. Что выполнится раньше: (i-1) или (i++) ?

i-1 потом i++,слева на право, а что, на разных компиляторах по разному выполняется?

Автор: Rififi 15.6.2008, 13:16
можно короче
И еще короче
совсем коротко:
int mas = {1,2,3,4,5,6,7,8,9,10};
:gigi:
Цитата(IKM2007 @  15.6.2008,  11:48 Найти цитируемый пост)
на разных компиляторах по разному выполняется?

одинаково. будет неопределённое поведение.

Автор: JackYF 15.6.2008, 19:01
Цитата(IKM2007 @  15.6.2008,  10:48 Найти цитируемый пост)
i-1 потом i++,слева на право

Если я не ошибаюсь, то нет. С чего ты взял, что слева направо? Это, скорее всего, undefined behaviour. Если считаешь, что ты прав, найти подверждение своим словам в стандарте.

Автор: anatox91 15.6.2008, 19:40
Цитата(IKM2007 @  15.6.2008,  11:30 Найти цитируемый пост)
И еще короче 
Код

for(int mas[10],i=1;i<=10;mas[i-1]=i++);
 

вот так уж точно не пойдет, т.к. и mas[10] и i локальны по отношению к циклу, и за пределами цикла их не будет видно

Автор: IKM2007 15.6.2008, 19:41
Цитата(JackYF @  15.6.2008,  19:01 Найти цитируемый пост)
Если я не ошибаюсь, то нет. С чего ты взял, что слева направо? Это, скорее всего, undefined behaviour. Если считаешь, что ты прав, найти подверждение своим словам в стандарте.

JackYF,
Да, дествительно справа налево, ошибся. smile 
Но так как написано mas[i-1] = i++; то i меняется после присваивания.
На Visual Studio 6.0 так работает.

Если не так, покаж пример, где не так работает.

Добавлено @ 19:44
Цитата(anatox91 @  15.6.2008,  19:40 Найти цитируемый пост)
вот так уж точно не пойдет, т.к. и mas[10] и i локальны по отношению к циклу, и за пределами цикла их не будет видно

Да, у меня Visual 6.0, в соседней теме узнал, что на "современных" компиляторах
for(int i;;)
i определен только в цикле. smile 

Автор: LavYaAll 16.6.2008, 08:13
IKM2007, дело не  в ассоциацивности операторов, а в том, что такая конструкция, где в одном выражении есть i и i++ является нехорошей. Верный результат не гарантируется.

Автор: IKM2007 16.6.2008, 11:05
Ах вот в чем дело. Понял! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)