void main()
{
printf("%f",12/7.0);
getch();
}

Akankah konversi tipe terjadi dalam kode ini dan jika ya mengapa itu terjadi dan jika tidak mengapa tidak terjadi dalam kode ini, tolong jelaskan? Saya juga berpikir 7.0 yang merupakan tipe data ganda di sini (sesuai dengan aturan konversi tipe) dan 12 yang merupakan tipe data integer akan memberikan tipe data ganda tetapi ketika saya mencetak dengan %lf maka output di layar lagi mengambang saya tidak ' t tahu bagaimana tolong perbaiki saya?

0
pratik jain 11 Mei 2021, 16:49

1 menjawab

Jawaban Terbaik

Anda tidak dapat menyimpulkan jenis ekspresi berdasarkan hasil pencetakan. printf mungkin hanya menunjukkan sebagian dari nilai...

Man printf mengatakan untuk format f atau F (penekanan adalah milik saya):

fF

Argumen ganda dibulatkan dan dikonversi ke notasi desimal dalam gaya [-]ddd.ddd, di mana jumlah digit setelah karakter titik desimal sama dengan spesifikasi presisi. Jika presisi tidak ada, diambil sebagai 6; jika presisi secara eksplisit nol, tidak ada desimal- karakter titik muncul. Jika titik desimal muncul, setidaknya satu digit muncul di depannya.

12 adalah literal int, 7.0 adalah literal double. Dengan aturan evaluasi ekspresi int akan dipromosikan menjadi double dan hasilnya akan menjadi double yang dicetak sesuai format (f bukan untuk float tetapi untuk double).

Jika Anda ingin mencetak nilai yang dihitung dengan pembagian float, Anda perlu membatasi ke float menggunakan:

12/7.0f

Hasilnya adalah float, dan Anda mungkin bertanya mengapa saya menggunakan specifier double? Karena, dalam fungsi variadik setiap float akan dipromosikan menjadi double. Karena printf adalah fungsi variadik... Inilah sebabnya mengapa tidak ada penentu float dalam format string printf.

2
Jean-Baptiste Yunès 11 Mei 2021, 16:20