GRY-Online.pl --> Archiwum Forum

Krótkie pytanie z c++

14.06.2007
19:04
[1]

Scatterhead [ łapaj dzień ]

Krótkie pytanie z c++

dlaczego ten program wypisuje 0, zamiast 0.(3)??


int main(int argc, char *argv[])

float r = 3/10;
printf("r: %f\n",r);
system("PAUSE");
return EXIT_SUCCESS;



14.06.2007
19:06
[2]

ronn [ moralizator ]

Ta linijka :

printf("r: %f\n",r);

tu masz odp :

14.06.2007
19:13
[3]

Scatterhead [ łapaj dzień ]

cout << "r: " << r; - pokazuje 0
printf("r: %e\n",r); - pokazuje 0.000000e+000
printf("r: %E\n",r); - pokazuje 0.000000E+000
printf("r: %e\n",r); - pokazuje 0
printf("r: %o\n",r); - pokazuje 0
printf("r: %u\n",r); - pokazuje 0
printf("r: %x\n",r); - pokazuje 0

14.06.2007
19:31
[4]

Scatterhead [ łapaj dzień ]

prosze, pomocy

14.06.2007
19:34
[5]

Jeremy [ Konsul ]

float r = 3/10;

Spróbuj:

float r = (float)3/(float)10;

14.06.2007
19:36
[6]

wysia [ Senator ]

printf("r: %4.2f\n",r);

Chyba. C++ ostatnio dotykalem jakies 10 lat temu.

14.06.2007
19:39
[7]

Scatterhead [ łapaj dzień ]

nie tutaj nie ma problemu z wypisywaniem jak pokazuje [3].
jest problem z tym, że float r = 10/3 nie przypipsuje wcale 3.333, tylko zero.
dopiero po r = (float)10/(float)3 dobrze przypisuje. Wielkie dzieki Jeremy

14.06.2007
19:55
[8]

maVes [ Generaďż˝ ]

Scatterhead -> problem wynika z faktu, że operator dzielenia to dwa różne operatory. Jeżeli po jego prawej stronie stoi liczba całkowita, to wynik jest również całkowity. Wynik jest rzeczywisty, jeśli liczba po prawej stronie jest typu rzeczywistego.
Działanie napisane w taki sposób powinno już działać:
float r = 10/3.0;

Oczywiście sposób pokazany przez Jeremego również jest dobry :)

15.06.2007
14:02
smile
[9]

Jeremy [ Konsul ]

Nie ma za co.
Jednak sposób maVesa proponuję - sprawia że nie zapomnisz o właściwości operatora ;)

© 2000-2026 GRY-OnLine S.A.