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


Автор: lllaman 4.7.2006, 22:58
Плиз, знающие люди, помогите !!!  smile  Написал прогу на С (если это можно назвать прогой), и не могу понять чё за трабла. Прога выводит заданное кол-во (например 10) случайных чисел от 0 до 9  в строку и так происходит 8 раз. А потом из каждой строки эти цифры загоняются в массив b[], т.е каждая строка в левом столбце должна загнаться соответствующий элемент массива b[] (первая строка в первый элемент b[0], вторая в b[1] и т.д.). Так вот в левом столбце всё в порядке, а в правом, где выводится поэлементно массив b[] происходит какая-то [censored 6] фигня и b[0]=-1 , а начиная с b[4] выводятся вообще грамадные числа с нулями на конце. Помогите решить этот вопрос, плиз, три дня уже парюсь и не могу понять  smile 

 Вот исходник:  


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int main ()
{
  int i,j,n,k;
  double a[100],b[100];
  /* initialize random generator */
  srand ( time(NULL) );
  printf("\n BBEDUTE n=");
  scanf("%d",&n);
  for(j=0;j<8;j++)
  {
     k=n-1;
     printf("\n                 ");
     for (i=0;i<n;)
      { 
        a[i]=rand()%10;
        if (a[0]==0) continue;
        printf("%1.0f ",a[i]);
        b[j]+=a[i]*pow(10,k);
        i++;
        k--;                
      }
      printf("  I    b[%d]=%.0f\n                                       I",j+1,b[j]);
  }
   printf("\n");
   scanf("%d");
   return 0;

Автор: mostly 4.7.2006, 23:24
Вот здесь
            b[j]+=a[i]*pow(10,k);

b[j] не определено, перед первым циклом обнулите массив b:

    for(i=0;i<8;i++)b[i]=0; 

Автор: lllaman 4.7.2006, 23:33
 smile Эврика !!! Огромное спасибо. Получилось, заработало ! Только тогда я не понимаю, почему массив a[] не надо в начале обнулять, а b[] надо ???  smile  

Автор: mostly 5.7.2006, 00:51
Потому что массив b[] при инициализации складывается со своим начальным значением:

b[j]+=a[i]*pow(10,k); 
          == 
b[j]=b[j]+a[i]*pow(10,k);

а оно было не определено в правой части выражения, а при инициализации массива a[] в правой части всё определено:

a[i]=rand()%10; 

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