只要用户在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);
}
}
答案 0 :(得分:2)
第一个循环是读取一对int
值。当遇到#
时,operator>>
失败,因为#
不是整数,因此设置cin
的错误状态,循环停止,{{1} }不是从#
中提取的。
未输入第二个循环,因为cin
仍然处于错误状态(并且因为cin
无论如何也无法读取#
,因此{{1}会再次失败)。
在您输入第二个循环之前,您需要拨打cin.ignore()
以跳过未读int
,并拨打cin.clear()
以重置错误状态。