簡體   English   中英

輸入時c ++ Cout不斷重復

[英]c++ Cout keeps repeating while inputting

我相信我的代碼是正確的,但是在輸入持卡人姓名之后,我要輸入的整個內容會不斷重復。

    Print Cards by selecting the type (0 when done): 
    1. Basic Card 
    2. ID Card 
    3. Bank Card 
    Card Type: 2
    Institution name: a
    Cardholder name: lola
    Expiration date mmddyyyy (0 if none): 

    Institution name: Cardholder name: Expiration date mmddyyyy (0 if none): 

    Institution name: Cardholder name: Expiration date mmddyyyy (0 if none): 

    Institution name: Cardholder name: Expiration date mmddyyyy (0 if none): 

    Institution name: Cardholder name: Expiration date mmddyyyy (0 if none): 

    Institution name: Cardholder name: Expiration date mmddyyyy (0 if none): 

為了避免這種情況我該怎么辦? 是我放在for循環中的參數嗎?

    #include <iostream>
    #include <vector>

    int main ()
    {
        std::vector <Card*> cardbook;
int card_type;
std::string institute_name;
std::string card_name;
int expire_date;
int identify_num;
int birthdate;
int account_num;
int secure_code;

std::cout << "Print Cards by selecting the type (0 when done): " << std::endl
          << " 1. Basic Card " << std::endl
          << " 2. ID Card " << std::endl
          << " 3. Bank Card " << std::endl;

std::cout << "Card Type: " ;
std::cin >> card_type;

while (card_type)
{
    if (card_type == 1)
    {
        std::cout << "Institution name: ";
        getline (std::cin, institute_name);
        std::cin.ignore();
        std::cout << "Cardholder name: ";
        getline (std::cin, card_name);
        std::cin.ignore();
        std::cout << "Expiration date mmddyyyy (0 if none): ";
        std::cin >> expire_date;
        std::cout << std::endl <<std::endl;
        cardbook.push_back (new Card(institute_name, card_name, expire_date));
    }
    else if (card_type == 2)
    {
        std::cout << "Institution name: ";
        getline (std::cin, institute_name);
        std::cin.ignore();
        std::cout << "Cardholder name: ";
        getline (std::cin, card_name);
        std::cin.ignore();
        std::cout << "Expiration date mmddyyyy (0 if none): ";
        std::cin >> expire_date;
        std::cout << "ID number: ";
        std::cin >> identify_num;
        std::cout << "DOB mmddyyyy (0 if not listed)";
        std::cin >> birthdate;
        std::cout << std::endl << std::endl;
        cardbook.push_back (new IDCard(institute_name, card_name, expire_date, identify_num, birthdate));
    }
    else if (card_type == 3)
    {
        std::cout << "Institution name: ";
        getline (std::cin, institute_name);
        std::cin.ignore();
        std::cout << "Cardholder name: ";
        getline (std::cin, card_name);
        std::cin.ignore();
        std::cout << "Expiration date mmddyyyy (0 if none): ";
        std::cin >> expire_date;
        std::cout << "Account number: ";
        std::cin >> account_num;
        std::cout << "Card Security Code: ";
        std::cin >> secure_code;
        std::cout << std::endl << std::endl;
        cardbook.push_back (new BankCard (institute_name, card_name, expire_date, account_num, secure_code));
    }
    else
    {
        break;
    }
}

for(auto& v : cardbook)
{
    v->print();
}
for (int i = 0; i < cardbook.size(); i++)
{
    delete cardbook[i];
}

return 0;
    }

注意:字符串庫包含在頭文件中。 還有另一個問題,如果我想按到期日期的順序輸入卡,排序功能是正確使用的功能嗎? 還是我會使用for循環? 提前致謝!

問題是您對變量card_type的輸入只能使用一次, 而while(card_type)的輸入只能永遠使用,因為它始終為非零。 我猜您需要將輸入部分放入循環中。


實際上,我的建議是,如果您是編程的初學者,請使用IDE或某種調試器。 同樣,良好的習慣是縮進並避免重復代碼。

由於card_type的輸入為2,並且此后永遠不會修改該值,因此while循環將永遠繼續。

這是因為任何非零整數都將計算為true 例如,編譯並執行以下代碼:

int main(){
    int t = 134;
    while(t){
        cout << "t is true !" << endl;
    }
}

將繼續打印t is true ! 直到您手動停止執行為止。 當然,這可以與ifwhile ...一起if 。這意味着可以將整數轉換為布爾值。 反之亦然。 可以將false強制轉換為int並將值設為0,將true值設為1。

長話短說:基本上任何期望布爾值作為參數的東西都可以將整數解釋為布爾值,將0評估為false ,將所有其他整數評估為true

暫無
暫無

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

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