Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [c++] детский вопрос про cin>>массив


Автор: scai 27.5.2007, 17:52
Код

#include <iostream.h>
int main(int argc, char *argv[])
{
  char line[20];
  for(int i=0; i<20;i++, line[i] = 0);
  cin>>line;
  for(int i=0;i<20;i++,cout<<line[i]);
  cin>>line;
  return 0;
}




почему  первый символ пропадает? на 123456 выдает 23456

Автор: Voldemar2004 27.5.2007, 17:58
Код
#include <iostream.h>
int main(int argc, char *argv[])
{
  char line[20];
  for(int i=0; i<20;i++, line[i] = 0);
  cin>>line;
  for(int i=0;i<20;i++,cout<<line[i-1]);
  cin>>line;
  return 0;

}


Добавлено через 2 минуты и 20 секунд
А теперь попробуй так: печать 123456
Код
#include <iostream.h>
int main(int argc, char *argv[])
{
  char line[20];
  for(int i=0; i<20;i++, line[i] = 0);
  cin>>line;
  for(int i=0;i<20;cout<<line[i++]);
  cin>>line;
  return 0;

}



А теперь так: - печать 23456
Код
#include <iostream.h>
int main(int argc, char *argv[])
{
  char line[20];
  for(int i=0; i<20;i++, line[i] = 0);
  cin>>line;
  for(int i=0;i<20;cout<<line[++i]);
  cin>>line;
  return 0;

}


Постфиксный и префиксный инкремент.

Автор: Xenon 27.5.2007, 18:05
scai, во-первых строчки 
Код

char line[20];
for(int i=0; i<20;i++, line[i] = 0);

Можно заменить на:
Код

char line[20] = { '0' };

Во-вторых оба цикла некорректны. Допустим, если взять первый.
Код

for(int i=0; i<20;i++, line[i] = 0);

Ты иницилизируешь счетчик i значением 0, делаешь одну итерацию цикла, затем увеличиваешь на 1 i, и выполняешь line[i] = 0, то есть у тебя получается присваивание начинается с line[1]. К тому же в последней итерацие цикла ты еще и вылезаешь за границы массива пытаясь сделать line[20] = 0, хотя последний элемент в твоем случае имеет индекс 19.
Поэтому, если заменить эти замысловатые конструкции на правильные, должны быть так:
Код

char line[20] = { '\0' } ;
for(int i = 0; i < 20; std::cout << line[i++]);

Автор: scai 27.5.2007, 18:35
line[i++]!!!! smile 
    
за 
Код

char line[20] = { '0' };
 спасибо еще одно.

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