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
Lepaskan: 2024-11-21 21:01:12
asal
289 orang telah melayarinya

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');
}
Salin selepas log masuk
  • 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);
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan