我正在编写一个打开文件的函数,其中打开模式取决于用户选择。以下是函数
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
语句的唯一理由是它们使程序更复杂。
答案 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);
}