Memiliki instruksi C++ sederhana seperti itu:

int f1 = 3238;

printf_s("Printf_1.cpp 1 - float: %d\n", f1);
printf_s("Printf_1.cpp 2 - float: %f\n", f1);

Output dari printf_s kedua adalah 0.000000 Pertanyaan saya adalah mengapa tidak hanya 3238.000000? Apa yang terjadi dengan 3238 bagian integral dari bilangan tersebut?

PS. Spesifikasi saya: Win 10, Microsoft Visual Studio Community 2019

c++
0
Daros911 12 Mei 2021, 11:58

1 menjawab

Jawaban Terbaik

printf memerlukan tipe argumen variabel agar sesuai dengan penentu format Anda. Secara khusus, %f mengharapkan Anda lulus double, dan Anda lulus int. printf menafsirkan byte int Anda dengan cara itu sehingga mencetak 0.000000, tetapi secara umum tidak ada jaminan apa yang harus dihasilkan oleh kombinasi tersebut (dan itu disebut "Perilaku Tidak Terdefinisi"). Yang perlu Anda lakukan adalah menambahkan typecast eksplisit ke ganda: printf("%f", (double) f1).

1
ivan.ukr 12 Mei 2021, 09:12