#include < stdio . h > | |
2 | #include < stdlib . h > |
3 | |
4 | typedef int BOOL; |
5 | |
6 | #define TRUE 1 |
7 | #define FALSE 0 |
8 | |
9 | // 程序的退出条件变量 |
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 | } |
面向对象基本原理一 再论面向过程 完整代码
最新推荐文章于 2021-02-09 13:59:21 发布
