在一个函数中以两个不同的while循环输入不起作用

时间:2018-03-02 21:15:10

标签: c++ c++11 visual-c++

只要用户在while循环中输入“#”,我就会接受输入。

我实现了下面看到的while算法,第一个实际上有效。但该程序不会进入第二个while循环。我在调试时看到的是,在一个函数中,只有一个while(cin>> ....)算法有效,它会自动忽略第二个算法。

有解决方法吗?如何使第二个while循环不被忽略?

void addTransaction(transactionNode* blockchain)
{
    string owner, sendTo="";
    int transactionId=0, outLocation=0, amount=0, tid;
    tid = blockchain->tid;
    transactionNode* newT = new transactionNode(++tid, owner, 0, 0, nullptr, nullptr, nullptr); // created a empty transaction Node for the new transaction

    cout << "Input the owner of the transaction: " << endl;
    cin >> owner;
    newT->owner = owner; // updated the name

    cout << "Write the input list in form of 'transactionId_1 outLocation_1 transactionId_2 outLocation_2 #' put # after all the inputs finish: " << endl;
    while (cin>> transactionId >> outLocation) // takes the inputs until '#' is entered
    {
        insertAtEndforinputNode(newT->inputList, transactionId, outLocation); // adds the new input node to the end of the inputList in our current transaction
    }

    cout << "Write the output list in form of 'amount_1 sentTo_1 amount_2 sentTo_2 #' put # after all inputs finish: " << endl;
    while (cin>> amount>> sendTo) 
    {
        insertAtEndforoutputNode(newT->outputList, amount, sendTo);
    }
}

1 个答案:

答案 0 :(得分:2)

第一个循环是读取一对int值。当遇到#时,operator>>失败,因为#不是整数,因此设置cin的错误状态,循环停止,{{1} }不是从#中提取的。

未输入第二个循环,因为cin仍然处于错误状态(并且因为cin无论如何也无法读取#,因此{{1}会再次失败)。

在您输入第二个循环之前,您需要拨打cin.ignore()以跳过未读int,并拨打cin.clear()以重置错误状态。