2017-08-06 17 views
-1

私はこれまでグローバル変数を使用してきました。私はちょうどそれが良い習慣ではないことを思い出しました。それで、私はこれを変えることができる方法はありますか?変数を値または参照として渡す必要がありますか?C++関数に値を渡す

あなたがCを使用しようとしている場合、これは、したがって、それはの内部表現をカプセル化するUserクラスを提示するよりクリーンになるのです、あなたはより良い言語機能を活用しようと思い++、コードまあ https://pastebin.com/JZaaR2Qd

using namespace std; 

string user_name; 
string str_age; 
unsigned short int user_age; 
char yes_no_prompt; 

void user_biodata_input() 
{ 
    cin.clear(); 
    cout << "Name : "; getline(cin >> ws, user_name); 
    cout << "Age : "; getline(cin, str_age); //taking age as a string 
    stringstream(str_age) >> user_age ; //extract int from a string 

    //Check if user input is not numeric, if so, repeat 
    while (cin.fail()) { 
     cin.clear(); 
     cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
     cout << "Input invalid! Please re-enter your age in numeric..." << endl; 
     cin >> user_age; 
    } 
} 

int main() 
{ 
    //Speed up cin and cout 
    ios_base::sync_with_stdio(false); 
    cin.tie(NULL); 

    //Start 
    cout << "Hi User, my name is Sirius. I'm your Digital Guidance (DG), nice to meet you..." << endl; 
    cout << "Please provide your data..." << endl; 
    user_biodata_input(); 

    show_user_biodata(); 

    while (yes_no_prompt == 'N' || yes_no_prompt == 'n') 
    { 
     cout << "Please re-enter your biodata..." << endl; 
     user_biodata_input(); 
     show_user_biodata(); 
    } 
+0

確かに、参照渡すことができます。あなたの質問は何ですか? –

答えて

0

です収集するユーザーデータたとえば:

class User { 

    public: 
     User(string name, unsigned short int age):_name(name),_age(age) {} 

     bool confirm() { 
      cin.clear(); 
      char yes_no_prompt; 
      cout << "Thank you for providing your data..."; 
      cout << "\nPlease confirm your data...(Y/N)\n" << endl; 

      //printing border 
      cout << setfill('-') << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << endl; 
      //printing student record 
      cout << setfill(' ') << setw(1) << "|" << setw(15) << left << "Name" << setw(1) << "|" << setw(15) << left << "Age" << setw(1) << "|" << endl; 
      //printing border 
      cout << setfill('-') << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << endl; 
      //printing student record 
      cout << setfill(' ') << setw(1) << "|" << setw(15) << left << this->_name << setw(1) << "|" << setw(15) << left << this->_age << setw(1) << "|" << endl; 
      //printing border 
      cout << setfill('-') << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << setw(15) << "-" << setw(1) << "+" << endl; 
      //printing student record 

      cin >> yes_no_prompt; 

      if (yes_no_prompt == 'Y' || yes_no_prompt == 'y') 
      { 
       cout << "\nThank you for giving cooperation...\nWe will now proceed to the academy..." << endl; 
       return true; 
      } 
      return false; 
     } 
    private: 
     string _name; 
     unsigned short int _age; 
}; 

今、あなたは、ユーザー情報を収集するための機能を実装できます。

User createUser() 
{ 
    cin.clear(); 
    string user_name; 
    string str_age; 
    unsigned short int age; 
    cout << "Name : "; getline(cin >> ws, user_name); 
    cout << "Age : "; getline(cin, str_age); //taking age as a string 
    stringstream(str_age) >> age ; //extract int from a string 

    //Check if user input is not numeric, if so, repeat 
    while (cin.fail()) { 
     cin.clear(); 
     cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
     cout << "Input invalid! Please re-enter your age in numeric..." << endl; 
     cin >> age; 
    } 
    return User(user_name, age); 
} 

最後のメインは、このようになります。もちろん

int main() 
{ 
    //Speed up cin and cout 
    ios_base::sync_with_stdio(false); 
    cin.tie(NULL); 

    //Start 
    cout << "Hi User, my name is Sirius. I'm your Digital Guidance (DG), nice to meet you..." << endl; 
    cout << "Please provide your data..." << endl; 

    User user = createUser(); 

    while (!user.confirm()) { 
     user = createUser(); 

    } 

    return 0; 

} 

をこれが唯一のドラフトで、あなたの関数がパラメータを受け取り、値を返すことができるようにすることもできます。 OOPはIMOにはるかにクリーンです。

関連する問題