Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengesahkan Input Berangka dalam C Beyond `atoi()`?

Bagaimana untuk Mengesahkan Input Berangka dalam C Beyond `atoi()`?

Linda Hamilton
Linda Hamiltonasal
2024-11-21 21:01:12298semak imbas

How to Validate Numeric Input in C   Beyond `atoi()`?

Mengesahkan Input Numerik dalam C

Dalam program yang memproses input integer, memastikan pengguna memberikan nombor yang sah adalah penting. Malangnya, fungsi atoi() gagal apabila berurusan dengan integer berbilang digit. Artikel ini meneroka kaedah alternatif untuk mengesahkan input berangka.

Menggunakan failbit

Strim input C (cin) menetapkan failbit apabila ia menemui input ia tidak boleh menghuraikan. Ini boleh dimanfaatkan untuk mengesahkan input seperti berikut:

int n;
cin >> n;
if(!cin) {
    // User did not input a number
    cin.clear();
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
  • jika(!cin) menyemak sama ada failbit ditetapkan.
  • cin.clear() menetapkan semula keadaan strim.
  • cin.ignore() melangkau input yang tidak sah, membenarkan masukkan semula.

Mengendalikan Limpahan Input

Apabila integer melebihi nilai maksimum yang dibenarkan, cin juga menetapkan failbit. Untuk mengelakkan ini, semak keadaan strim sebelum membaca input:

while(!cin.eof()) {
    int n;
    cin >> n;
    if(!cin) {
        // Input error occurred
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    else {
        // Valid input
        process(n);
    }
}

Gelung ini meneruskan membaca dan mengesahkan input sehingga akhir fail (EOF) dicapai.

Lain-lain Alternatif

  • Arus rentetan C 11: Cipta aliran rentetan daripada input dan cuba menukarnya kepada integer.
  • Ungkapan Biasa (regex): Gunakan ungkapan biasa untuk menguatkuasakan format angka tertentu.
  • Boost Libraries: Gunakan rangsangan Boost::regex atau boost::lexical_cast untuk input pengesahan.

Atas ialah kandungan terperinci Bagaimana untuk Mengesahkan Input Berangka dalam C Beyond `atoi()`?. 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