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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在一个函数中以两个不同的while循环输入不起作用相关的知识,希望对你有一定的参考价值。

只要用户在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);
    }
}
答案

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

没有输入第二个循环,因为cin仍然处于错误状态(并且因为无论如何#都不能被读作int,所以operator>>会再次失败)。

在进入第二个循环之前,需要调用cin.ignore()跳过未读的#,并调用cin.clear()来重置错误状态。

以上是关于在一个函数中以两个不同的while循环输入不起作用的主要内容,如果未能解决你的问题,请参考以下文章

带有while循环的Recvall在python中的两个设备之间不起作用

使用 sleep() 函数作为带有 while 循环的计时器不起作用?

C#while循环不起作用[关闭]

std::cin 在 do-while 循环中不起作用

警报(int)在while循环中不起作用

while 循环在 useEffect 挂钩中不起作用