C++中如何處理stdin輸入錯(cuò)誤

c++
小樊
83
2024-09-10 17:23:24

在C++中,處理stdin輸入錯(cuò)誤可以通過(guò)檢查輸入流的狀態(tài)來(lái)完成。當(dāng)輸入流遇到錯(cuò)誤時(shí),例如輸入的數(shù)據(jù)類型與期望的不匹配,它會(huì)設(shè)置一個(gè)內(nèi)部標(biāo)志,稱為錯(cuò)誤狀態(tài)。你可以使用std::istream的成員函數(shù)來(lái)檢查和處理這些錯(cuò)誤。

以下是一個(gè)簡(jiǎn)單的示例,展示了如何處理stdin輸入錯(cuò)誤:

#include<iostream>
#include<limits>

int main() {
    int input;

    std::cout << "請(qǐng)輸入一個(gè)整數(shù): ";
    std::cin >> input;

    // 檢查輸入是否有效
    if (std::cin.fail()) {
        // 清除錯(cuò)誤狀態(tài)
        std::cin.clear();
        // 忽略錯(cuò)誤字符
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cerr << "輸入錯(cuò)誤,請(qǐng)輸入一個(gè)整數(shù)。"<< std::endl;
    } else {
        std::cout << "你輸入的整數(shù)是: "<< input<< std::endl;
    }

    return 0;
}

在這個(gè)示例中,我們首先嘗試從stdin讀取一個(gè)整數(shù)。如果輸入失敗(例如,用戶輸入了一個(gè)非數(shù)字字符),std::cin.fail()將返回true。然后,我們使用std::cin.clear()清除錯(cuò)誤狀態(tài),并使用std::cin.ignore()忽略錯(cuò)誤字符。最后,我們向用戶顯示一條錯(cuò)誤消息。

注意,std::numeric_limits<std::streamsize>::max()是一個(gè)非常大的值,用于確保ignore()函數(shù)能夠忽略所有錯(cuò)誤字符,直到遇到換行符。

0