Gå til innhold

Problemer med printf


Anbefalte innlegg

Har en del kode som regner:

//Generate gravity data
for (x = 0; x < ROWS; x++) {
for (y = 0; y < COLS; y++) {
 dx = x - Xcenter;
 dy = y - Ycenter;
 //Popluate the array
 gravDepth1[x] [y].scalar = grav_calcScalar (grav_UnitConv(dx), grav_UnitConv(dy), MASS1);
 gravDepth1[x] [y].angle = atan (dy / dx);
 gravDepth1[x] [y].Xvec = gravDepth1[x] [y].scalar * cos (gravDepth1[x] [y].angle);
 gravDepth1[x] [y].Yvec = gravDepth1[x] [y].scalar * sin (gravDepth1[x] [y].angle);
}
printf ("POS: (%d,%d), Scalar: %f, Angle: %f, Vector: [%f,%f]\n", x, y, gravDepth1[x] [y].scalar, gravDepth1[x] [y].angle, gravDepth1[x] [y].Xvec, gravDepth1[x] [y].Yvec);
}

 

Og alle %f-sakene blir printa som "0.000000"!

 

Men litt lenger nede:

//min
min = max;
for (x = 0; x < ROWS; x++) {
for (y = 0; y < COLS; y++) {
 if (gravDepth1 [x] [y].scalar < min) {
  min = gravDepth1 [x] [y].scalar;
 }
}
}
printf ("min: %f\n", min);

og her blir det printa helt fint?!? Synes det er litt merkelig, og trenger dette outputet for å få debugga programmet mitt...

Lenke til kommentar
Videoannonse
Annonse

nei... Y er definert høyere opp i koden - noe outputet "beviser":

OS: (626,480), Scalar: 0.000000, Angle: 0.000000, Vector: [0.000000,0.000000]
POS: (627,480), Scalar: 0.000000, Angle: 0.000000, Vector: [0.000000,0.000000]
POS: (628,480), Scalar: 0.000000, Angle: 0.000000, Vector: [0.000000,0.000000]
POS: (629,480), Scalar: 0.000000, Angle: 0.000000, Vector: [0.000000,0.000000]
POS: (630,480), Scalar: 0.000000, Angle: 0.000000, Vector: [0.000000,0.000000]
POS: (631,480), Scalar: 0.000000, Angle: 0.000000, Vector: [0.000000,0.000000]
POS: (632,480), Scalar: 0.000000, Angle: 0.000000, Vector: [0.000000,0.000000]
POS: (633,480), Scalar: 0.000000, Angle: 0.000000, Vector: [0.000000,0.000000]
POS: (634,480), Scalar: 0.000000, Angle: 0.000000, Vector: [0.000000,0.000000]
POS: (635,480), Scalar: 0.000000, Angle: 0.000000, Vector: [0.000000,0.000000]
POS: (636,480), Scalar: 0.000000, Angle: 0.000000, Vector: [0.000000,0.000000]
POS: (637,480), Scalar: 0.000000, Angle: 0.000000, Vector: [0.000000,0.000000]
POS: (638,480), Scalar: 0.000000, Angle: 0.000000, Vector: [0.000000,0.000000]
POS: (639,480), Scalar: 0.000000, Angle: 0.000000, Vector: [0.000000,0.000000]
max: 9.816933
min: 0.001422

 

Et utsnitt av output'en. (helt på slutten). Den looper definitivt igjennom alt.

 

Kan jo prøve å flytte den, men tviler på at det hjelper...

Lenke til kommentar

Usjk... gir meg - funka nå (why!?!? WHY?!?)

 

Endra

 

//Generate gravity data
for (x = 0; x < ROWS; x++) {
for (y = 0; y < COLS; y++) {
 dx = x - Xcenter;
 dy = y - Ycenter;
 //Popluate the array
 gravDepth1[x] [y].scalar = grav_calcScalar (grav_UnitConv(dx), grav_UnitConv(dy), MASS1);
 gravDepth1[x] [y].angle = atan (dy / dx);
 gravDepth1[x] [y].Xvec = gravDepth1[x] [y].scalar * cos (gravDepth1[x] [y].angle);
 gravDepth1[x] [y].Yvec = gravDepth1[x] [y].scalar * sin (gravDepth1[x] [y].angle);
 printf ("POS: (%d,%d), Scalar: %f, Angle: %f, Vector: [%f,%f]\n", x, y, gravDepth1[x] [y].scalar, gravDepth1[x] [y].angle, gravDepth1[x] [y].Xvec, gravDepth1[x] [y].Yvec);
}
}

 

Output:

POS: (336,3), Scalar: 0.004560, Angle: -0.850475, Vector: [0.003008,-0.003427]
POS: (336,4), Scalar: 0.004581, Angle: -0.848378, Vector: [0.003029,-0.003437]
POS: (336,5), Scalar: 0.004603, Angle: -0.846271, Vector: [0.003051,-0.003447]
POS: (336,6), Scalar: 0.004625, Angle: -0.844154, Vector: [0.003073,-0.003457]
POS: (336,7), Scalar: 0.004647, Angle: -0.842027, Vector: [0.003095,-0.003467]
POS: (336,8), Scalar: 0.004670, Angle: -0.839890, Vector: [0.003117,-0.003477]
POS: (336,9), Scalar: 0.004692, Angle: -0.837742, Vector: [0.003140,-0.003487]
POS: (336,10), Scalar: 0.004715, Angle: -0.835584, Vector: [0.003162,-0.003497]
POS: (336,11), Scalar: 0.004737, Angle: -0.833416, Vector: [0.003185,-0.003507]
POS: (336,12), Scalar: 0.004760, Angle: -0.831238, Vector: [0.003208,-0.003516]
POS: (336,13), Scalar: 0.004783, Angle: -0.829049, Vector: [0.003231,-0.003526]
POS: (336,14), Scalar: 0.004806, Angle: -0.826849, Vector: [0.003254,-0.003536]
POS: (336,15), Scalar: 0.004829, Angle: -0.824639, Vector: [0.003278,-0.003546]
POS: (336,16), Scalar: 0.004852, Angle: -0.822418, Vector: [0.003302,-0.003555]
POS: (336,17), Scalar: 0.004875, Angle: -0.820187, Vector: [0.003325,-0.003565]
POS: (336,18), Scalar: 0.004899, Angle: -0.817945, Vector: [0.003349,-0.003575]
POS: (336,19), Scalar: 0.004922, Angle: -0.815692, Vector: [0.003374,-0.003584]
POS: (336,20), Scalar: 0.004946, Angle: -0.813428, Vector: [0.003398,-0.003594]
POS: (336,21), Scalar: 0.004970, Angle: -0.811154, Vector: [0.003422,-0.003603]
POS: (336,22), Scalar: 0.004994, Angle: -0.808868, Vector: [0.003447,-0.003613]
POS: (336,23), Scalar: 0.005018, Angle: -0.806571, Vector: [0.003472,-0.003622]
POS: (336,24), Scalar: 0.005042, Angle: -0.804264, Vector: [0.003497,-0.003632]
POS: (336,25), Scalar: 0.005066, Angle: -0.801945, Vector: [0.003523,-0.003641]
POS: (336,26), Scalar: 0.005091, Angle: -0.799615, Vector: [0.003548,-0.003650]
POS: (336,27), Scalar: 0.005115, Angle: -0.797274, Vector: [0.003574,-0.003660]
POS: (336,28), Scalar: 0.005140, Angle: -0.794922, Vector: [0.003600,-0.003669]
POS: (336,29), Scalar: 0.005164, Angle: -0.792558, Vector: [0.003626,-0.003678]
POS: (336,30), Scalar: 0.005189, Angle: -0.790183, Vector: [0.003652,-0.003687]
POS: (336,31), Scalar: 0.005214, Angle: -0.787796, Vector: [0.003678,-0.003696]
POS: (336,32), Scalar: 0.005240, Angle: -0.785398, Vector: [0.003705,-0.003705]
POS: (336,33), Scalar: 0.005265, Angle: -0.782989, Vector: [0.003732,-0.003714]
POS: (336,34), Scalar: 0.005290, Angle: -0.780567, Vector: [0.003759,-0.003723]

 

Eneste er at utregningen nå tar en evighet... Og da snakker jeg om 2,8 GHz'ern på skolen, ikke om 600 mhz'ern hjemme :) Ikke at gnome-terminal (vte) i den versjonen jeg har her er så fryyyyyktelig raskt det heller da...

Lenke til kommentar
  kyrsjo skrev:
nei... Y er definert høyere opp i koden - noe outputet "beviser":

Selvsagt :blush:

 

y vil alltid være like COLS

 

Men y=COLS vil antagelig være utenfor array'en, og dermed vil resultatet være udefinert.

 

Hvis du bare ønsker å skrive ut en verdi for hver x, endre y til y/2. Da får du midt i 2D-arrayen et sted.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...