簡體   English   中英

如何在Qt中檢查C ++中的類型

[英]How to check types in C++ in Qt

我需要檢查用戶輸入的輸入類型,如果它不是所需的類型,我應該打印一條錯誤消息。 我的代碼是:

int ClassInput::inputInt(QString str)
{
    signed int l;
    std::cout << str.toStdString();
    std::cin>>l;

    while(!l)
    {
        eh.handleError(1);
        std::cin>>l;
        cin.clear ();
        cin.ignore (1000, '\n');
    }
    return l;
}

但問題是,當輸入浮點值時,它不會打印錯誤消息。 此外,它將進入下一步並執行計算,就好像輸入了右輸入一樣。

有時它無限地打印錯誤語句。 請任何人都可以更正我的代碼?

我認為typeinfo正是你要找的。 這可以是int的情況的示例代碼,作為來自用戶的預期輸入。

std::cin>>l;
QString input = typeid(l).name();
if(input.compare("int")) continue;

我認為你的問題不是類型檢查,而是值檢查。 所以typeid實際上不是一個好選擇。

特別是關於你的問題的解決方案。 您應該在輸入上添加更嚴格的值檢查。 將用戶的輸入存儲在int變量中不是一個好主意。 因為如果用戶鍵入一個float變量,它將被隱式轉換為int。 因此,當輸入浮點值時,您的代碼不會打印錯誤消息。 但它不會影響您的后續計算。

另外一件事,如果輸入不是數字,而是字符,0將被分配給您的輸入變量。

為了穩健地檢查輸入值,您應該將輸入變量的類型更改為std:string並檢查該字符串是否是合法輸入。 可能的例行程序:

  1. 檢查是否有非數字。

  2. 根據您的計划需要檢查它是否是合法數字。

因此,而不是只寫一個粗!l支票,寫另一個單獨的檢查功能,並在這里調用它。

暫無
暫無

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

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