控制台C+中的循环错误+; 我正在编写一个控制台C++购物清单程序,当我试图从购物清单中删除一个项目时,我会得到这个奇怪的循环错误。如果我试图删除的项目的名称不止一个单词,它会在该函数的主菜单端快速循环
deleteItem函数的代码如下所示:控制台C+中的循环错误+; 我正在编写一个控制台C++购物清单程序,当我试图从购物清单中删除一个项目时,我会得到这个奇怪的循环错误。如果我试图删除的项目的名称不止一个单词,它会在该函数的主菜单端快速循环,c++,C++,deleteItem函数的代码如下所示: void deleteItem() { string itemToDelete; cout << "Which item would you like to delete?" << endl; cin >> itemToDelete; iFile.open("ShoppingList.dat"); if(!iFile.is_open()) //check that file e
void deleteItem()
{
string itemToDelete;
cout << "Which item would you like to delete?" << endl;
cin >> itemToDelete;
iFile.open("ShoppingList.dat");
if(!iFile.is_open()) //check that file exists
{
cout << "Shopping List doesn't exist! Returning to main menu." << endl;
cin.get();
mainMenu();
}
oFile.open("Transfers.dat", ios::trunc); //create and/or clear temp transfers.dat file
oFile.close();
while (!iFile.eof())
{
getline(iFile, newItem);
if(newItem.compare(itemToDelete) != 0)
{
oFile.open("Transfers.dat", ios::app);
oFile << newItem << endl;
oFile.close();
}
}
iFile.close();
int result;
remove("ShoppingList.dat"); //delete old ShoppingList.dat
result=rename("Transfers.dat", "ShoppingList.dat"); //Rename the file with transfered data to the Shoping List
cout << "Success" << endl;
cin.ignore();
cin.get();
mainMenu();
}
void deleteItem()
{
字符串itemtodelet;
不能删除项目;
iFile.open(“ShoppingList.dat”);
如果(!iFile.is_open())//检查文件是否存在
{
cout嗯,最可能的解决方案是你打算做:
getline( cin, itemToDelete );
如果您使用cin>>itemtodele
它将只读取一个单词。您没有显示deleteItem()
之外的任何逻辑,因此很难评论这将产生什么影响
然而,我对main menu()
函数的功能很好奇。您似乎在调用它时就好像它将从deleteItem()返回一样函数,当然不是。你是说返回?cin
读取到一个空格。如果你想要多个单词,请使用getline
。这是一个很好的观点。这看起来像是堆栈溢出正在等待发生。非常感谢。这解决了问题(getline)。main menu()
实际上是函数的主菜单。我只是将它用作函数完成时的回调。它不是一个返回调用,因为我不希望它总是返回到最初调用它的函数(它可能完全从单独的函数调用)。这很酷,但请注意有关从deleteeItem()
调用mainMenu()
的另一部分。尤其是mainMenu()
调用deleteeItem()
?在这种情况下,您每次都会卷起堆栈。您可能需要处理deleteeItem()
作为一种对主菜单的存在一无所知的操作。将对mainMenu()
的调用替换为return
。回到原始问题,我怀疑您的快速启动菜单可能是由于在mainMenu()中使用cin.get()
引起的
,因此cin
中剩余单词中的每个字符都被解释为(可能无效)菜单选项。