面向对象基本原理一 再论面向过程 完整代码

#include   < stdio . h >
#include   < stdlib . h >
 
typedef   int   BOOL;
 
#define   TRUE   1
#define   FALSE   0
 
//   程序的退出条件变量
10  static   BOOL   g_bQuit   =   FALSE;
11   
12  //   保存用户输入字符串的 缓冲变量
13  static   char   g_szBuffer[ 1024 ]   =   " " ;
14   
15  /* *
16    *   显示菜单1
17    */
18  void   ShowMenuFirst()
19  {
20      printf( " 1.   输入字符串 " );
21      printf( " /n0.   退出 " );
22  }
23   
24  /* *
25    *   显示菜单2
26    */
27  void   ShowMenuSecond()
28  {
29      printf( " 1.   重新输入字符串 " );
30      printf( " /n2.   显示字符串 " );
31      printf( " /n3.   翻转字符串 " );
32      printf( " /n0.   退出 " );
33  }
34   
35  /* *
36    *   根据情况显示菜单
37    */
38  void   ShowMenu()
39  {
40      //   判断g_szBuffer中是否保存了字符串,根据这一条件,显示第一个菜单或第二个 菜单
41      if   (g_szBuffer[ 0 ]   = =   ' /0 ' )   {
42          ShowMenuFirst();
43      }   else   {
44          ShowMenuSecond();
45      }
46      printf( " /n请输入您的选项: " );
47  }
48   
49  /* *
50    *   获取用户输入
51    *   返回:用户输入的结果。
52    */
53  int   GetUserInput()
54  {
55      //   从输入流里读取一个字符
56      int   nInput   =   fgetc(stdin);
57      //   刷新输入流,清空输入流中的其它字符
58      fflush(stdin);
59      return   nInput;
60  }
61   
62  /* *
63    *   显示错误信息
64    */
65  void   ShowError()
66  {
67      printf( " 对不起,您输入的菜单项不存在,请重新输入。/n " );
68  }
69   
70  /* *
71    *   询问用户是否需要退出
72    */
73  void   AskIfCanQuit()
74  {
75      //   接收用户输入字符的变量
76      int   nInput   =   - 1 ;
77   
78      printf( " /n是否要退出?[Y/N]: " );
79   
80      //   从用户输入中读取字符
81      nInput   =   fgetc(stdin);
82      fflush(stdin);
83   
84      //   判断字符是否为y(忽略大小写),如果是y,则设置全局变量g_bQuit的值,交给 主流程处理退出
85      if   (nInput   = =   ' y '   | |   nInput   = =   ' Y ' )   {
86          g_bQuit   =   TRUE;
87      }
88  }
89   
90  /* *
91    *   获取用户输入字符串
92    */
93  void   GetInputString()
94  {
95      //   定义接收用户输入的字符
96      int   nInput   =   EOF;
97      //   统计用户输入字符个数
98      int   i   =   0 ;
99   
100      printf( " /n请输入任意字符串: " );
101      //   循环,直到符合如下条件之一:1、读取到输入流结尾;2、用户输入了一个换行字符 (/n);3、用户输入字符数大于缓冲区长度
102      do   {
103          //   读取一个字符并存入缓冲区
104          nInput   =   fgetc(stdin);
105          g_szBuffer[i + + ]   =   ( char )nInput;
106      }   while   (nInput   ! =   EOF   & &   nInput   ! =   ' /n '   & &   i   <   1024 );
107   
108      //   在字符串末尾加上结束符,注意这里要覆盖掉最后一个字符,因为上一个循环导致最后一个 输入的总是无效字符
109      g_szBuffer[i   -   1 ]   =   ' /0 ' ;
110      printf( " 输入完毕。/n " );
111  }
112   
113  /* *
114    *   显示用户输入字符串
115    */
116  void   ShowInputString()
117  {
118      printf( " 您输入的字符串为:%s/n " ,   g_szBuffer);
119  }
120   
121  /* *
122    *   翻转字符串
123    */
124  void   ReverseInputString()
125  {
126      //   pH指向字符串起始位置
127      char *   pH   =   g_szBuffer;
128      //   pE指向字符串最后一个字符(/0字符)的前一个字符(即最后一个有效字符)
129      char *   pE   =   g_szBuffer   +   strlen(g_szBuffer)   -   1 ;
130      //   定义临时变量
131      char   cTemp;
132   
133      //   循环,直到pH,pE指针指向内存地址重合
134      while   (pH   < =   pE)   {
135          //   交互字符位置
136          cTemp   =   * pH;
137          * pH   =   * pE;
138          * pE   =   cTemp;
139   
140          //   pH后移,pE前移
141          + + pH;
142          - - pE;
143      }
144      printf( " 翻转完毕/n " );
145  }
146   
147  /* *
148    *   根据用户输入执行对应的流程。
149    *   参数:nInput,   用户输入的字符
150    */
151  void   DoSomethingWithInput( int   nInput)
152  {
153      switch   (nInput)   {
154      case   ' 0 ' :
155          AskIfCanQuit();
156          break ;
157      case   ' 1 ' :
158          GetInputString();
159          break ;
160      case   ' 2 ' :
161          if   (g_szBuffer[ 0 ]   = =   ' /0 ' )   {
162              ShowError();
163          }
164          ShowInputString();
165          break ;
166      case   ' 3 ' :
167          if   (g_szBuffer[ 0 ]   = =   ' /0 ' )   {
168              ShowError();
169          }
170          ReverseInputString();
171          break ;
172      default :
173          ShowError();
174      }
175  }
176   
177  int   main( int   argc,   char *   argv[])
178  {
179      //   用于接收用户输入菜单项的变量
180      int   nInput   =   - 1 ;
181   
182      //   循环三个流程
183      while   ( ! g_bQuit)   {
184          ShowMenu();
185          nInput   =   GetUserInput();
186          DoSomethingWithInput(nInput);
187   
188          //   在三步流程完毕后,输出一个空行
189          printf( " /n " );
190      }
191      system( " pause " );
192      return   0 ;
193  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值