Ingernirated
@Ingernirated
Романыч

Почему цикл не выводи столбик?

int main() 
{
int num, i, ar;
int arr[10];
for(num = 0; num < 10; ++num) {
    for(i = 0; i <= num; ++i) {
    ++arr[num - '0'];
   }
}
for(ar = 0; ar < num: ++ar) 
    printf("%d\n", arr[ar]);

return 0;
}

Почему результат не
0
1
2
3
4
5
6...

А выдает
0
0
0
0
4195904
0
4195488
0
-10....
  • Вопрос задан
  • 207 просмотров
Решения вопроса 3
Даже если исправить все синтаксические ошибки в коде, то всё равно выражение
arr[num - '0'] адресует область памяти перед массивом, а не сам массив, т.к. символ '0' имеет код 48.
Ответ написан
Комментировать
Не очень понятно, зачем при заполнении вообще вложенный цикл
int main() 
{
  int num, ar;
  int arr[10];
  for(num = 0; num < 10; num++) 
    arr[num] = num;
  num = 10;     //вроде как после цикла for значение счётчика не гарантируется 
  for(ar = 0; ar < num; ar++) 
    printf("%d\n", arr[ar]);
  return 0;
}


Или можно вообще объединить все в один цикл
int main() 
{
  int num;
  int arr[10];
  for(num = 0; num < 10; num++) 
  {
    arr[num] = num;
    printf("%d\n", arr[num]);
  }
  return 0;
}
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
int main() {
  int num, i, ar;
  int arr[10] = {0}; // читайте как правильно инициализировать массив
  for(num = 0; num < 10; ++num) {
    for(i = 0; i <= num; ++i) {
      // ++arr[num - '0'];  WTF?? - '0'
      ++arr[num];
    }
  }
  // for(ar = 0; ar < num: ++ar) опечатка? Как оно хоть что-то выдает, с такими ошибками?
  for(ar = 0; ar < num; ++ar)
    printf("%d\n", arr[ar]);
  return 0;
}

Если коротко - вы выделили память под массив но не задали начальные значения, и там оказались какие-то данные от предыдущей работы компьютера.
cppstudio.com/post/389
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы