Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengendalikan Input Berangka dalam C dengan Teguh untuk Mencegah Ralat Input Separa?

Bagaimanakah Saya Boleh Mengendalikan Input Berangka dalam C dengan Teguh untuk Mencegah Ralat Input Separa?

DDD
DDDasal
2024-12-21 07:29:10436semak imbas

How Can I Robustly Handle Numerical Input in C   to Prevent Partial Input Errors?

Memastikan Input Berangka dengan Pengendalian Ralat Teguh

Dalam pengaturcaraan C, aliran input standard (cin) ialah alat serba boleh untuk membaca input pengguna . Walau bagaimanapun, apabila ia datang untuk memastikan bahawa input adalah berangka secara eksklusif, langkah tambahan diperlukan.

Satu pendekatan untuk mengesahkan input berangka melibatkan penggunaan gelung untuk berulang kali menggesa pengguna sehingga nombor yang sah dimasukkan. Kod yang disediakan dalam huraian masalah menggunakan teknik ini, menyemak kegagalan input menggunakan cin.fail(). Apabila menghadapi input yang tidak sah, ia mengosongkan penimbal dan menggesa pengguna untuk memasukkan semula nombor.

Walau bagaimanapun, pendekatan ini mempunyai potensi pengehadan: jika pengguna memasukkan nombor separa sah, seperti "1x, " bahagian "1" akan diterima sebagai input, meninggalkan aksara "x" dalam penimbal. Ini boleh membawa kepada gelagat yang tidak dijangka untuk operasi input seterusnya.

Untuk menangani isu ini, pendekatan yang lebih mantap melibatkan penggunaan std::getline() untuk membaca keseluruhan baris input sebagai rentetan. Selepas itu, std::stringstream boleh digunakan untuk menukar keseluruhan baris kepada nombor titik terapung berketepatan dua kali. Jika penukaran berjaya (disahkan dengan menyemak ss.eof()), input dianggap sah dan gelung boleh dikeluarkan.

Berikut ialah versi diubah suai bagi kod yang menggabungkan pengendalian ralat yang dipertingkatkan ini :

#include <string>
#include <sstream>

double enter_number() {
    std::string line;
    double number;
    while (true) {
        std::getline(std::cin, line);
        std::stringstream ss(line);
        if (ss >> number) {
            if (ss.eof()) {
                return number;
            }
        }
        std::cout << "Invalid input, please enter a numerical value: ";
    }
}

Kod ini memastikan bahawa hanya nombor nyata yang sah, tanpa sebarang aksara mengekor, diterima sebagai input. Ia berulang kali menggesa pengguna sehingga input yang sah diberikan, memberikan pengalaman yang lebih mantap dan mesra pengguna.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Input Berangka dalam C dengan Teguh untuk Mencegah Ralat Input Separa?. 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