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!