goto语句与递归

时间:2015-11-22 14:43:19

标签: c++11 recursion goto

我正在编写一个打开文件的函数,其中打开模式取决于用户选择。以下是函数

void open_file(char T)
{
    string name;
open:
    cout << "\n Enter filename/path : ";
    cin >> name;
    if(T == 'N')
        file.open(name);
    else 
        if(T == 'O')
        {
            file.open(name, ios::app | ios::in);
            if(!file)
            {
                cout << "\n File not found. Try again";
                goto open;
            }
            file.seekg(0);
        }
}

如果找不到该文件,程序将转到open:,因为我使用了未经认可的goto语句。请注意,open:在声明name后开始。

我想知道goto open是否内存效率更低/速度慢于open_file('O'),因为open_file('O')每次调用时都会声明name。 请注意:人们不使用goto语句的唯一理由是它们使程序更复杂。

1 个答案:

答案 0 :(得分:2)

如果您使用while块而不是goto,则会更容易阅读。不需要递归。

void open_file(char T)
{
    string name;
    bool retry;
    do {    
        retry = false;
        cout << "\n Enter filename/path : ";
        cin >> name;
        if(T == 'N')
            file.open(name);
        else 
            if(T == 'O')
            {
                file.open(name, ios::app | ios::in);
                if(!file)
                {
                    cout << "\n File not found. Try again";
                    retry = true;
                } 
                else
                    file.seekg(0);
            }
    } while (retry);
}