snipplrCallback({"id":146162,"title":"c-example-with-input-arguments-using-flags","source":"
  1. #include <iostream><\/span><\/div><\/li>
  2. #include <fstream><\/span><\/div><\/li>
  3. #include <string.h><\/span><\/div><\/li>
  4. #include <string><\/span><\/div><\/li>
  5.  <\/div><\/li>
  6. using<\/span> namespace<\/span> std;<\/span><\/div><\/li>
  7.  <\/div><\/li>
  8. class<\/span> Contact {<\/span><\/div><\/li>
  9. public<\/span>:<\/span><\/div><\/li>
  10. Contact(<\/span>)<\/span> :<\/span><\/div><\/li>
  11. m_firstname(<\/span>""<\/span>)<\/span>, <\/div><\/li>
  12. m_lastname(<\/span>""<\/span>)<\/span>, <\/div><\/li>
  13. m_email(<\/span>""<\/span>)<\/span>, <\/div><\/li>
  14. m_phone(<\/span>""<\/span>)<\/span>, <\/div><\/li>
  15. m_debug_mode(<\/span>false<\/span>)<\/span>,<\/div><\/li>
  16. m_cnt(<\/span>0<\/span>)<\/span>,<\/div><\/li>
  17. m_already_saved(<\/span>false<\/span>)<\/span><\/div><\/li>
  18. {<\/span>}<\/span>;<\/span><\/div><\/li>
  19. ~Contact(<\/span>)<\/span><\/div><\/li>
  20. {<\/span>}<\/span>;<\/span><\/div><\/li>
  21.  <\/div><\/li>
  22. void<\/span> displayHelp(<\/span>)<\/span> {<\/span><\/div><\/li>
  23. cout<\/span> <<<\/span> " Welcome to new_user. USAGE:"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  24. cout<\/span> <<<\/span> "-d, --debug Enable debug mode"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  25. cout<\/span> <<<\/span> "-e, --email <email-address> Email of the user"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  26. cout<\/span> <<<\/span> "-h, --help Print this help"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  27. cout<\/span> <<<\/span> "-n, --name <first-name> First name of the user"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  28. cout<\/span> <<<\/span> "-p, --phone <phone-number> Phone number of the user"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  29. cout<\/span> <<<\/span> "--show Show addresslist"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  30. cout<\/span> <<<\/span> "-s, --surname <last-name> Last name of the user"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  31. }<\/span>;<\/span><\/div><\/li>
  32.  <\/div><\/li>
  33. bool<\/span> welcomeScreen(<\/span>int<\/span> argc, char<\/span>*<\/span> argv[<\/span>]<\/span>)<\/span> {<\/span><\/div><\/li>
  34. int<\/span> step =<\/span> 2<\/span>;<\/span><\/div><\/li>
  35. if<\/span> (<\/span>argc ==<\/span> 1<\/span>)<\/span> return<\/span> false<\/span>;<\/span><\/div><\/li>
  36. else<\/span> {<\/span><\/div><\/li>
  37. for<\/span> (<\/span>int<\/span> i =<\/span> 1<\/span>;<\/span> i <<\/span> argc;<\/span> i =<\/span> i +<\/span> step)<\/span> {<\/span><\/div><\/li>
  38. \tif<\/span> (<\/span>!<\/span>strcmp<\/span>(<\/span>argv[<\/span>i]<\/span>,"-n"<\/span>)<\/span> ||<\/span> !<\/span>strcmp<\/span>(<\/span>argv[<\/span>i]<\/span>,"--name"<\/span>)<\/span>)<\/span>{<\/span><\/div><\/li>
  39. \t m_firstname =<\/span> argv[<\/span>i+<\/span>1<\/span>]<\/span>;<\/span><\/div><\/li>
  40. \t step =<\/span> 2<\/span>;<\/span><\/div><\/li>
  41.  <\/div><\/li>
  42. \t}<\/span> else<\/span> if<\/span> (<\/span>!<\/span>strcmp<\/span>(<\/span>argv[<\/span>i]<\/span>,"-s"<\/span>)<\/span> ||<\/span> !<\/span>strcmp<\/span>(<\/span>argv[<\/span>i]<\/span>,"--surname"<\/span>)<\/span>)<\/span>{<\/span><\/div><\/li>
  43. \t m_lastname =<\/span> argv[<\/span>i+<\/span>1<\/span>]<\/span>;<\/span><\/div><\/li>
  44. \t step =<\/span> 2<\/span>;<\/span><\/div><\/li>
  45.  <\/div><\/li>
  46. \t}<\/span> else<\/span> if<\/span> (<\/span>!<\/span>strcmp<\/span>(<\/span>argv[<\/span>i]<\/span>,"-e"<\/span>)<\/span> ||<\/span> !<\/span>strcmp<\/span>(<\/span>argv[<\/span>i]<\/span>,"--email"<\/span>)<\/span>)<\/span> {<\/span><\/div><\/li>
  47. \t m_email =<\/span> argv[<\/span>i+<\/span>1<\/span>]<\/span>;<\/span><\/div><\/li>
  48. \t step =<\/span> 2<\/span>;<\/span><\/div><\/li>
  49.  <\/div><\/li>
  50. \t}<\/span> else<\/span> if<\/span> (<\/span>!<\/span>strcmp<\/span>(<\/span>argv[<\/span>i]<\/span>,"-p"<\/span>)<\/span> ||<\/span> !<\/span>strcmp<\/span>(<\/span>argv[<\/span>i]<\/span>,"--phone"<\/span>)<\/span>)<\/span> {<\/span><\/div><\/li>
  51. \t m_phone =<\/span> argv[<\/span>i+<\/span>1<\/span>]<\/span>;<\/span><\/div><\/li>
  52. \t step =<\/span> 2<\/span>;<\/span><\/div><\/li>
  53.  <\/div><\/li>
  54. \t}<\/span> else<\/span> if<\/span> (<\/span>!<\/span>strcmp<\/span>(<\/span>argv[<\/span>i]<\/span>,"-d"<\/span>)<\/span> ||<\/span> !<\/span>strcmp<\/span>(<\/span>argv[<\/span>i]<\/span>,"--debug"<\/span>)<\/span>)<\/span> {<\/span><\/div><\/li>
  55. \t m_debug_mode =<\/span> true<\/span>;<\/span><\/div><\/li>
  56. \t step =<\/span> 1<\/span>;<\/span><\/div><\/li>
  57. \t}<\/span> else<\/span> if<\/span> (<\/span>!<\/span>strcmp<\/span>(<\/span>argv[<\/span>i]<\/span>,"--show"<\/span>)<\/span>)<\/span> {<\/span><\/div><\/li>
  58. \t readAddressList(<\/span>)<\/span>;<\/span><\/div><\/li>
  59.  <\/div><\/li>
  60. \t}<\/span> else<\/span> if<\/span> (<\/span>!<\/span>strcmp<\/span>(<\/span>argv[<\/span>i]<\/span>,"-h"<\/span>)<\/span> ||<\/span> !<\/span>strcmp<\/span>(<\/span>argv[<\/span>i]<\/span>,"--help"<\/span>)<\/span>)<\/span> {<\/span><\/div><\/li>
  61. \t displayHelp(<\/span>)<\/span>;<\/span><\/div><\/li>
  62. \t step =<\/span> 1<\/span>;<\/span><\/div><\/li>
  63.  <\/div><\/li>
  64. \t}<\/span> else<\/span> {<\/span><\/div><\/li>
  65. \t cout<\/span> <<<\/span> "[UNKNOWN OPTION "<\/span> <<<\/span> argv[<\/span>i]<\/span> <<<\/span> "]"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  66. \t displayHelp(<\/span>)<\/span>;<\/span><\/div><\/li>
  67. \t step =<\/span> 1<\/span>;<\/span><\/div><\/li>
  68. \t return<\/span> false<\/span>;<\/span><\/div><\/li>
  69. \t}<\/span><\/div><\/li>
  70. }<\/span> \/\/end for-loop<\/span><\/div><\/li>
  71. if<\/span> (<\/span>m_firstname !<\/span>=<\/span> ""<\/span> ||<\/span> m_lastname !<\/span>=<\/span> ""<\/span> ||<\/span> m_email !<\/span>=<\/span> ""<\/span> ||<\/span> m_phone !<\/span>=<\/span> ""<\/span>)<\/span> m_cnt++<\/span>;<\/span><\/div><\/li>
  72. }<\/span> \/\/end if-else-block<\/span><\/div><\/li>
  73. return<\/span> true<\/span>;<\/span><\/div><\/li>
  74. }<\/span>;<\/span><\/div><\/li>
  75.  <\/div><\/li>
  76. int<\/span> printWelcomeHeader(<\/span>)<\/span> {<\/span><\/div><\/li>
  77. int<\/span> option;<\/span><\/div><\/li>
  78. cout<\/span> <<<\/span> "********************************************"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  79. cout<\/span> <<<\/span> "*********WELCOME TO THE ADDRESSLIST*********"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  80. cout<\/span> <<<\/span> "********************************************"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  81. if<\/span> (<\/span>m_debug_mode ==<\/span> true<\/span>)<\/span> cout<\/span> <<<\/span> "[DEBUG] mode is on"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  82. if<\/span> (<\/span>m_cnt !<\/span>=<\/span> 0<\/span>)<\/span> cout<\/span> <<<\/span> m_cnt <<<\/span> " contact(s) ready to be saved. Select option 2"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  83. cout<\/span> <<<\/span> "----------OPTIONS----------"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  84. cout<\/span> <<<\/span> ". 1. Show contacts ."<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  85. cout<\/span> <<<\/span> ". 2. Save contact to file ."<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  86. cout<\/span> <<<\/span> ". 3. Exit ."<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  87. cout<\/span> <<<\/span> "---------------------------"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  88. cout<\/span> <<<\/span> "Option: "<\/span>;<\/span> cin<\/span> >><\/span> option;<\/span><\/div><\/li>
  89. cout<\/span> <<<\/span> "---------"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  90. return<\/span> option;<\/span><\/div><\/li>
  91. }<\/span>;<\/span><\/div><\/li>
  92.  <\/div><\/li>
  93. void<\/span> readAddressList(<\/span>)<\/span> {<\/span><\/div><\/li>
  94. string line;<\/span><\/div><\/li>
  95. ifstream addresslist_in(<\/span>"addresslist.txt"<\/span>)<\/span>;<\/span><\/div><\/li>
  96. if<\/span> (<\/span>m_debug_mode)<\/span> cout<\/span> <<<\/span> "[DEBUG]Reading from file..."<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  97. if<\/span> (<\/span>addresslist_in.is_open<\/span>(<\/span>)<\/span>)<\/span> {<\/span><\/div><\/li>
  98. cout<\/span> <<<\/span> " @@@@@@@@@@@@@@@@@@@@@[addresslist.txt]@@@@@@@@@@@@@@@@@@@@@"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  99. while<\/span> (<\/span> getline (<\/span>addresslist_in, line)<\/span> )<\/span> {<\/span><\/div><\/li>
  100. \tcout<\/span> <<<\/span> " "<\/span> <<<\/span> line <<<\/span> "\\n<\/span>"<\/span>;<\/span><\/div><\/li>
  101. }<\/span><\/div><\/li>
  102. addresslist_in.close<\/span>(<\/span>)<\/span>;<\/span><\/div><\/li>
  103. cout<\/span> <<<\/span> " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  104. if<\/span> (<\/span>m_debug_mode)<\/span> {<\/span><\/div><\/li>
  105. \tcout<\/span> <<<\/span> "[DEBUG]File was read successfully..."<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  106. }<\/span><\/div><\/li>
  107. }<\/span> else<\/span> cout<\/span> <<<\/span> "[ERROR]Unable to open file."<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  108. }<\/span>;<\/span><\/div><\/li>
  109.  <\/div><\/li>
  110. void<\/span> writeToAddressList(<\/span>)<\/span> {<\/span><\/div><\/li>
  111. ofstream addresslist_out;<\/span><\/div><\/li>
  112. if<\/span> (<\/span>m_debug_mode)<\/span> cout<\/span> <<<\/span> "[DEBUG]Saving contact to addresslist.txt ..."<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  113. if<\/span> (<\/span>m_firstname ==<\/span> ""<\/span> &&<\/span> m_lastname ==<\/span> ""<\/span> &&<\/span> m_email ==<\/span> ""<\/span> &&<\/span> m_phone ==<\/span> ""<\/span>)<\/span> {<\/span><\/div><\/li>
  114. cout<\/span> <<<\/span> "Cannot creaty empty contact."<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  115. return<\/span>;<\/span><\/div><\/li>
  116. }<\/span> else<\/span> {<\/span><\/div><\/li>
  117. if<\/span> (<\/span>m_already_saved ==<\/span> false<\/span>)<\/span> {<\/span><\/div><\/li>
  118. \tif<\/span> (<\/span>m_already_saved ==<\/span> false<\/span>)<\/span> {<\/span><\/div><\/li>
  119. \t addresslist_out.open<\/span>(<\/span>"addresslist.txt"<\/span>, ios::<\/span>out<\/span> |<\/span> ios::<\/span>app<\/span>)<\/span>;<\/span><\/div><\/li>
  120. \t addresslist_out <<<\/span> "----------------------------------------------\\n<\/span>"<\/span>;<\/span><\/div><\/li>
  121. \t addresslist_out <<<\/span> "Name: "<\/span> +<\/span> m_firstname +<\/span> " "<\/span> +<\/span> m_lastname +<\/span> "\\n<\/span>"<\/span>;<\/span><\/div><\/li>
  122. \t addresslist_out <<<\/span> "Email: "<\/span> +<\/span> m_email +<\/span> "\\n<\/span>"<\/span>;<\/span><\/div><\/li>
  123. \t addresslist_out <<<\/span> "Phone number: "<\/span> +<\/span> m_phone +<\/span> "\\n<\/span>"<\/span>;<\/span><\/div><\/li>
  124. \t addresslist_out.close<\/span>(<\/span>)<\/span>;<\/span><\/div><\/li>
  125. \t if<\/span> (<\/span>m_debug_mode)<\/span> {<\/span><\/div><\/li>
  126. \t cout<\/span> <<<\/span> "[DEBUG]Contact successfully saved!!"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  127. \t if<\/span> (<\/span>m_cnt ><\/span> 0<\/span>)<\/span> m_cnt--<\/span>;<\/span><\/div><\/li>
  128. \t }<\/span><\/div><\/li>
  129. \t m_already_saved =<\/span> true<\/span>;<\/span><\/div><\/li>
  130. \t}<\/span><\/div><\/li>
  131. }<\/span> else<\/span> cout<\/span> <<<\/span> "Contact already saved!!"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  132. }<\/span><\/div><\/li>
  133. }<\/span>;<\/span><\/div><\/li>
  134.  <\/div><\/li>
  135. public<\/span>:<\/span><\/div><\/li>
  136. string m_firstname;<\/span><\/div><\/li>
  137. string m_lastname;<\/span><\/div><\/li>
  138. string m_email;<\/span><\/div><\/li>
  139. string m_phone;<\/span><\/div><\/li>
  140. bool<\/span> m_debug_mode;<\/span><\/div><\/li>
  141. bool<\/span> m_already_saved;<\/span><\/div><\/li>
  142. int<\/span> m_cnt;<\/span><\/div><\/li>
  143. }<\/span>;<\/span><\/div><\/li>
  144.  <\/div><\/li>
  145.  <\/div><\/li>
  146. int<\/span> main(<\/span>int<\/span> argc, char<\/span>*<\/span> argv[<\/span>]<\/span>)<\/span> {<\/span><\/div><\/li>
  147.  <\/div><\/li>
  148. Contact*<\/span> contact =<\/span> new<\/span> Contact(<\/span>)<\/span>;<\/span><\/div><\/li>
  149. int<\/span> opt;<\/span><\/div><\/li>
  150. string name, surname, email, phone,line;<\/span><\/div><\/li>
  151. bool<\/span> cont =<\/span> true<\/span>;<\/span><\/div><\/li>
  152.  <\/div><\/li>
  153. if<\/span> (<\/span>!<\/span>contact-<\/span>><\/span>welcomeScreen(<\/span>argc,argv)<\/span>)<\/span> {<\/span><\/div><\/li>
  154. cout<\/span> <<<\/span> "(You can add the -h or --help flag to display help)"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  155. cout<\/span> <<<\/span> "Exiting application.."<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  156. return<\/span> 0<\/span>;<\/span><\/div><\/li>
  157. }<\/span> else<\/span> {<\/span> \/\/input arguments<\/span><\/div><\/li>
  158. if<\/span> (<\/span>argc ><\/span> 2<\/span>)<\/span> cout<\/span> <<<\/span> "New contact already created from command line!"<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  159. }<\/span><\/div><\/li>
  160.  <\/div><\/li>
  161. while<\/span> (<\/span>cont ==<\/span>true<\/span>)<\/span> {<\/span><\/div><\/li>
  162. opt =<\/span> contact-<\/span>><\/span>printWelcomeHeader(<\/span>)<\/span>;<\/span><\/div><\/li>
  163. switch<\/span> (<\/span>opt)<\/span> {<\/span><\/div><\/li>
  164. case<\/span> 1<\/span>:<\/span><\/div><\/li>
  165. {<\/span>\t<\/div><\/li>
  166. \tcontact-<\/span>><\/span>readAddressList(<\/span>)<\/span>;<\/span><\/div><\/li>
  167. }<\/span><\/div><\/li>
  168. break<\/span>;<\/span><\/div><\/li>
  169. case<\/span> 2<\/span>:<\/span><\/div><\/li>
  170. {<\/span><\/div><\/li>
  171. \tcontact-<\/span>><\/span>writeToAddressList(<\/span>)<\/span>;<\/span><\/div><\/li>
  172. \tbreak<\/span>;<\/span><\/div><\/li>
  173. }<\/span><\/div><\/li>
  174. case<\/span> 3<\/span>:<\/span><\/div><\/li>
  175. {<\/span><\/div><\/li>
  176. \tcont =<\/span> false<\/span>;<\/span><\/div><\/li>
  177. \tcout<\/span> <<<\/span> "Exiting application..."<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  178. \tbreak<\/span>;<\/span><\/div><\/li>
  179. }<\/span><\/div><\/li>
  180. default<\/span>:<\/span><\/div><\/li>
  181. cout<\/span> <<<\/span> "Wrong option entered."<\/span> <<<\/span> endl;<\/span><\/div><\/li>
  182. break<\/span>;<\/span><\/div><\/li>
  183. }<\/span> \/\/end of switch<\/span><\/div><\/li>
  184.  <\/div><\/li>
  185. }<\/span> \/\/end of while<\/span><\/div><\/li>
  186.  <\/div><\/li>
  187. return<\/span> 0<\/span>;<\/span><\/div><\/li>
  188. }<\/span><\/div><\/li><\/ol><\/pre>","link":"https:\/\/snipplr.com\/view\/146162\/c-example-with-input-arguments-using-flags"});