Rumah >pembangunan bahagian belakang >C++ >Patutkah `isdigit()` Mengambil Input `char` atau `int`?

Patutkah `isdigit()` Mengambil Input `char` atau `int`?

Linda Hamilton
Linda Hamiltonasal
2024-10-31 13:24:02424semak imbas

 Should `isdigit()` Take a `char` or `int` Input?

Adakah Fungsi isdigit() Ditujukan untuk Input Char atau Int?

Dalam coretan kod yang disediakan, syarat if menggunakan isdigit() kepada tentukan sama ada aksara input ialah digit. Walau bagaimanapun, persoalan timbul mengenai jenis pembolehubah input yang sesuai: char atau int.

Menyelidiki Asal-usul C

Untuk memahami pilihan input int, kita mesti mendalami asal isdigit() dalam C. Fungsi ini direka bentuk untuk berfungsi dengan getchar(), yang membaca aksara sebagai int untuk menyediakan kedua-dua aksara dan kod ralat. Nilai negatif menunjukkan ralat, manakala nilai positif mewakili kod aksara.

Acara Ditandatangani lwn Tanpa Tandatangan

Persediaan ini menimbulkan dilema dengan aksara, yang boleh sama ada ditandatangani atau tidak ditandatangani bergantung pada pelaksanaan. Kebanyakan sistem menggunakan char bertandatangan secara lalai, yang membawa kepada potensi pertembungan dengan konvensyen kod ralat getchar() (nilai negatif).

Penukaran Jenis untuk isdigit()

Untuk menangani isu ini, isdigit() menjangkakan input int yang mewakili aksara yang tidak ditandatangani. Oleh itu, syarat if yang betul ialah:

if(isdigit((unsigned char)c))

Pertimbangan Tambahan

Di sebalik teka-teki char-int, adalah penting untuk menyemak penutupan strim sebelum mengakses c. Ini memastikan strim masih sah dan nilai c telah ditetapkan dengan betul.

Ringkasan

Walaupun kod awal mungkin tidak kelihatan salah, ia mengabaikan selok-belok char's signedness dan keperluan input isdigit(). Dengan menghantar input kepada aksara yang tidak ditandatangani, kami mematuhi kontrak fungsi dan mengelakkan kemungkinan tingkah laku yang tidak ditentukan.

Atas ialah kandungan terperinci Patutkah `isdigit()` Mengambil Input `char` atau `int`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn