1

当我使用while循环和switch语句时,我的 main 中出现了一些错误。我检查了花括号,我找不到错字。任何人都可以看到问题吗?

bool menu = true;
    while(menu)// Loop to revert back to menu when choice is not compatable with options.
    {
    int selection;
    cout<< "Choice: ";
    cin>> selection;

        switch(selection)
        {
        case 1:
            cout<< "View Elements.";
            Array.print();
            break;
        case 2:
            cout<< "Delete Element. ";
            break;
        case 3:
            cout<< "Delete All Elements. ";
            //Array.clear(OrderedArray);
            break;
        case 4:
            cout<< "Insert Element. ";
            //Array.Insert();
            break;
        case 5:
            cout<< "Search for Element. ";
            bool searchMenu = true;
            while(searchMenu)
            {
            int searchSelection;
            cout<< "Choice: ";
            cin>> searchSelection;

            switch(searchSelection)
            {
                case 1:
                cout<< "Linear Search. ";
                //Array.linearSearch();
                    break;

                case 2:
                cout<< "Binary Search ";
                //Array.binarySearch();
                    break;
            }

            }
            break;
        case 6:
            cout<< "Store. ";
            bool storeMenu = true;
            while(storeMenu)
            {
            int storeSelection;
            cout<< "Choice: ";
            cin>> storeSelection;

            switch(storeSelection)
            {
                case 1:
                cout<< "Write File ";
                //Array.writeFile();
                    break;

                case 2:
                cout<< "Read File ";
                //Array.readFile();
                    break;
            }
            }
            break;
        case 7:
            cout<< "Sort. ";
            Array.sort();
            break;
        case 8:
            cout << "Exit.";
            cout << "Please press Enter to exit.";

        }
    }

这些是错误:

error C2360: initialization of 'searchMenu' is skipped by 'case' label  c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp    71  1   Repeat - Ordered Array

error C2360: initialization of 'storeMenu' is skipped by 'case' label   c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp    94  1   Repeat - Ordered Array

error C2360: initialization of 'searchMenu' is skipped by 'case' label  c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp    94  1   Repeat - Ordered Array

error C2360: initialization of 'storeMenu' is skipped by 'case' label   c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp    98  1   Repeat - Ordered Array

error C2360: initialization of 'searchMenu' is skipped by 'case' label  c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp    98  1   Repeat - Ordered Array`
4

3 回答 3

4

一旦 case 语句的代码超过两三行,就应该将其转换为单独的函数。尤其是这些嵌套菜单。其他答案是正确的,编译器抱怨在 case 语句中定义变量;代码审查者会抱怨 switch 语句太复杂。

于 2012-08-16T15:40:16.530 回答
2

您必须将变量定义包装{ }在 switch 语句内的新块 ( ) 中,即

switch (var) {
case X: {
    bool var = here;
}
}
于 2012-08-16T15:37:55.013 回答
1

case除非为它们创建本地范围,否则不能在块内创建初始化变量:

switch(Foo)
{
    case A:
    int a = 0; <== error
    break;

    case B:
    {
        int b = 0; <== ok
    }
    break;
}
于 2012-08-16T15:38:21.610 回答