Rumah >pembangunan bahagian belakang >C++ >Sekiranya saya menggunakan char atau int untuk pengesahan input dalam C?

Sekiranya saya menggunakan char atau int untuk pengesahan input dalam C?

Susan Sarandon
Susan Sarandonasal
2024-10-28 22:30:30448semak imbas

 Should I use char or int for input validation in C?

isdigit(c) - Menggunakan char vs. int untuk Pengesahan Input

Apabila memeriksa kod anda, yang bertujuan untuk mengesahkan input pengguna sebagai digit, persoalan timbul: apakah jenis pembolehubah input - char atau int?

Memahami dilema ini memerlukan menyelidiki selok-belok fungsi isdigit dalam C. Bertentangan dengan namanya, isdigit mengharapkan hujah integer, menimbulkan kebimbangan tentang keserasian dengan input aksara.

Penjelasan terletak pada sejarah C, khususnya getchar(), yang mendapatkan semula aksara sebagai integer untuk menampung kedua-dua kod aksara dan kod ralat (nilai negatif yang mewakili EOF). Reka bentuk ini mencipta isu keserasian dengan char, yang boleh sama ada ditandatangani atau tidak ditandatangani bergantung pada pengkompil.

Char yang ditandatangani memberikan cabaran kerana nilai negatif bertindih dengan EOF, yang berpotensi membawa kepada ralat. Oleh itu, isdigit dan fungsi yang berkaitan memerlukan input yang dianggap sebagai aksara tidak bertanda untuk memastikan positif.

Untuk memastikan keserasian, ubah suai kod anda seperti berikut:

<code class="c">if(isdigit((unsigned char)c))</code>

Selain itu, adalah penting untuk mengesahkan bahawa strim input adalah sah sebelum menggunakan c kerana strim tertutup boleh meninggalkannya tanpa dimulakan.

Atas ialah kandungan terperinci Sekiranya saya menggunakan char atau int untuk pengesahan input dalam C?. 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