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
Lepaskan: 2024-12-21 07:29:10
asal
434 orang telah melayarinya

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: ";
    }
}
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan