请评价一上这段代码,并提出需要改进的地方
请评价一下这段代码,并提出需要改进的地方
唔...程序的作用我就不解释了,大家都看得懂的。我想知道作为一个C的初学者,这段代码是否符合要求了,还有什么需要改进的吗?
另外本人有个疑惑:是否应该在主函数里定义first, second,而给计算函数Add和其他加上形式参数?这两种方法哪种好些?
------解决方案--------------------
应该把first,second的读取放到方面,
界面,控制,和逻辑分开实现 是一个基本要求吧。
------解决方案--------------------
挺好,
------解决方案--------------------
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
if (条件1) break;
//...
if (条件2) continue;
//...
if (条件3) return;
//...
}
- C/C++ code
#include <stdio.h> char get_choice (void); void Add (void); void Subtract (void); void Multiply (void); void Divide (void); char get_first (void); float get_num (void); int main (void) { char choice; do { printf ("Enter the operation of your choice:\n"); printf ("a. add s. subtract \n"); printf ("m. multiply d. divide \n"); printf ("q. quit \n"); choice = get_choice (); switch (choice) { case 'a': Add (); break; case 's': Subtract (); break; case 'm': Multiply (); break; case 'd': Divide (); break; case 'q': break; default: printf ("Programe error!\n"); break; } }while (choice != 'q'); printf ("Bye.\n"); system ("pause"); return 0; } char get_choice (void) { char ch; ch = get_first (); while (ch != 'a' && ch != 's' && ch != 'm' && ch != 'd' && ch != 'q') { printf ("Enter again: \n"); ch = get_first (); } return ch; } void Add (void) { float first, second; printf ("Enter first number: "); first = get_num (); printf ("Enter second number: "); second = get_num (); printf ("%.1f + %.1f = %.1f\n", first, second, first + second); } void Subtract (void) { float first, second; printf ("Enter first number: "); first = get_num (); printf ("Enter second number: "); second = get_num (); printf ("%.1f - %.1f = %.1f\n", first, second, first - second); } void Multiply (void) { float first, second; printf ("Enter first number: "); first = get_num (); printf ("Enter second number: "); second = get_num (); printf ("%.1f * %.1f = %.1f\n", first, second, first * second); } void Divide (void) { float first, second; printf ("Enter first number: "); first = get_num (); printf ("Enter second number: "); while ((second = get_num ()) == 0) { printf ("Enter a number other than 0: "); } printf ("%.1f / %.1f = %.1f\n", first, second, first / second); } char get_first (void) { char ch; while ((ch = getchar ()) == '\n') continue; while (getchar () != '\n') continue; return ch; } float get_num (void) { char ch; float num; while (scanf ("%f", &num) != 1) { while ((ch = getchar ()) != '\n') { putchar (ch); } printf (" is not an number.\n"); printf ("Please enter a number , such as 2.5, -1.78E8, or 3: "); } return num; }
唔...程序的作用我就不解释了,大家都看得懂的。我想知道作为一个C的初学者,这段代码是否符合要求了,还有什么需要改进的吗?
另外本人有个疑惑:是否应该在主函数里定义first, second,而给计算函数Add和其他加上形式参数?这两种方法哪种好些?
------解决方案--------------------
应该把first,second的读取放到方面,
界面,控制,和逻辑分开实现 是一个基本要求吧。
------解决方案--------------------
挺好,
------解决方案--------------------
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
if (条件1) break;
//...
if (条件2) continue;
//...
if (条件3) return;
//...
}