[ zagor_te_nej @ 19.12.2012. 18:31 ] @
#include <stdio.h>
#define DIM 50

int main()
{
while(1){double a[DIM],b[DIM],skal_pro;
int i,n;
printf("\nDuzina vektora(najvise%d):",DIM);
scanf("%d",&n);
if(n<=0 || n>DIM)
break;
printf("Komponente vektora A:");
for(i=0;i<n;scanf("%lf",&a[i++]));
printf("Komponente vektora B:");
for(i=0;i<n;scanf("%lf",&b[i++]));
for(skal_pro=i=0;i<n;i++)skal_pro+=a*b;
printf("Skalarni proizvod A*B:%10.3f\n",skal_pro);

}
return 0;

}
ovaj program računa skalarni proizvod dva vektora,inače primer iz knjige Lasla Krausa izdanje 2006.Jasno mi je sve šta se tu dogadja osim jedne stvari.
Pokušao sam da ga modifikujem tako da mi javi poruku o pogrešno izabranom n iz if naredbe.To sam uradio tako što sam stavio printf izmedju if i break.

Kada stavim n koje je manje od nula ili veće od DIM program mi lepo javlja poruku preko printf naredbe,ali kada unesem korektno n od 1 do 50 program se
prekine sa porukom proces returned......

Zanima me da mi neko objasni zašto se ovo dogadja ili ako je jednostavnije da napiše kod koji će raditi a ja ću već shvatiti gde grešim.
Hvala!




[ plague @ 19.12.2012. 18:52 ] @
Code (c):

#include <stdio.h>
#define DIM 50

int  main()
{
     while(1)
     {
          double a[DIM],b[DIM],skal_pro;

          int i,n;
          printf("\nDuzina vektora(najvise%d):",DIM);
          scanf("%d",&n);
          if(n<=0 || n>DIM)
          {
               printf("'n' mora biti vece od nula i manje od 50");
               break;
          }
          printf("Komponente vektora A:");
          for(i=0;i<n;scanf("%lf",&a[i++]));
          printf("Komponente vektora B:");
          for(i=0;i<n;scanf("%lf",&b[i++]));
          for(skal_pro=i=0;i<n;i++)skal_pro+=a[i]*b[i];
          printf("Skalarni proizvod A*B:%.3f\n",skal_pro);

     }
     return 0;

}
 

Svaki kod koji se izvrsava unutar for, while ili if treba biti obuhvacen viticastim zagradama { ... } osim u slucaju kada se izvrsava samo jedna linija koda.

Kada si dodao printf ispod if desilo se to da se ta linija izvrsi samo kada je uslov ispunjen, medjutim zbog toga se break; uvek izvrsavao, cak i kada n ima validnu vrednost.
[ zagor_te_nej @ 19.12.2012. 19:39 ] @
Hvala,sad mi je sve jasno.