在一个函数中以两个不同的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中的两个设备之间不起作用