2015-11-22 76 views
0

我正在寫一個函數,打開一個文件,其中打開模式取決於用戶的選擇。下面給出的函數goto語句vs遞歸

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聲明。請注意0​​在申報name後開始。

我想知道,如果goto open是更少的內存效率/比open_file('O')或不慢,因爲open_file('O')將在每次調用時聲明name。 請注意:人們給予不使用goto陳述的唯一原因是他們使程序更復雜。

回答

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); 
} 
+0

你的意思是'while(file){// ...}'? –

+0

你沒有在你的問題中定義文件,所以我定義了一個布爾值來檢查打開是否成功。 – Shloim

+0

不錯,但它是一個fstream類的成員函數。無論如何,非常感謝! –