gpt4 book ai didi

c++ - 在一个函数中的两个不同的 while 循环中获取输入不起作用

转载 作者:行者123 更新时间:2023-11-28 01:36:27 26 4
gpt4 key购买 nike

只要用户在 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()重置错误状态。

关于c++ - 在一个函数中的两个不同的 while 循环中获取输入不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49077537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com