簡體   English   中英

C ++檢查cin的輸入以獲取正確的數據

[英]C++ Checking input of cin for proper data

您好,我正在開發一個程序,該程序正在檢查用戶輸入並要求用戶重新輸入數據是否與程序所尋找的類型不匹配(在這種情況下,我正在尋找double數據類型)。 下面是我當前的代碼。

#include <iostream>
using namespace std;


int main()
{
    //Declare Variables and define.
    double var1,
           var2,
           var3,
           var4,
           var5,
           sum,
           avg;



        cout << "Input Five Values to be averaged. Press Enter to Continue" << endl;

    do {
        cin.clear();
        cin.ignore();
        cout << "Input first value:" << endl;
        cin >> var1;


    } while(cin.fail());

    do {
        cin.clear();
        cin.ignore();
        cout << "Input second value:" << endl;
        cin >> var2;


    } while (cin.fail());



    do {
        cin.clear();
        cin.ignore();
        cout << "Input third value:" << endl;
        cin >> var3;


    } while (cin.fail());



    do {
        cin.clear();
        cin.ignore();
        cout << "Input Fouth value:" << endl;
        cin >> var4;


    } while (cin.fail());


    do {
        cin.clear();
        cin.ignore();
        cout << "Input fifth value:" << endl;
        cin >> var5;


    } while (cin.fail());




//Sum the values.
sum = var1 + var2 + var3 + var4 + var5;

//Calculate the Average of Sum.
avg = sum / 5;

// Display the results.
cout << "The average is: " << avg << endl;

system("pause");


return 0;
}

當我輸入“ 2ss”的“ aa”,“ s2”或“ s2” /“ 22s”的字符數過多時,問題就不會再次出現。它將轉到下一個輸入請求。 為什么會發生這種情況,我該如何糾正這種行為?

先感謝您!

代替cin.ignore(); , 采用:

cin.ignore(std::numberic_limits<std::streamsize>::max(), '\n');

這將忽略256個字符或每個字符,直到換行符為止(以先到者為准)。 截至目前,您僅從緩沖區中清除了一個字符,正如您所發現的那樣,這並不總是足夠的。

感謝@Arnav和@Dietmar提供了忽略的正確字符數!

其他更好的答案說明了如何使其停止。 這就是它發生的原因:

double d;
cin >> d;

會讀取盡可能多的“雙重字符”字符,然后停止。 因此,例如,如果您輸入“ 2ss”,則提取器將使用“ 2”,並將get指針保留在第一個“ s”處。 如果輸入“ aa”,則提取器不消耗任何東西。 多余的字符(以及換行符)如何處理取決於您。

由於您沒有消耗輸入緩沖區中的所有字符,因此當循環循環時,其余字符之一被ignore()消耗,然后再次嘗試,直到所有字符消失。

您嘗試實現的實際要求是要么只能在一行上輸入一個數字(在這種情況下,建議使用getline / strod是適當的),要么應該默默地吞下一行上的所有多余字符,在這種情況下,更精確的ignore()規范是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM