Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
控制台C+中的循环错误+; 我正在编写一个控制台C++购物清单程序,当我试图从购物清单中删除一个项目时,我会得到这个奇怪的循环错误。如果我试图删除的项目的名称不止一个单词,它会在该函数的主菜单端快速循环_C++ - Fatal编程技术网

控制台C+中的循环错误+; 我正在编写一个控制台C++购物清单程序,当我试图从购物清单中删除一个项目时,我会得到这个奇怪的循环错误。如果我试图删除的项目的名称不止一个单词,它会在该函数的主菜单端快速循环

控制台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

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 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
中剩余单词中的每个字符都被解释为(可能无效)菜单选项。