请评价一上这段代码,并提出需要改进的地方

请评价一下这段代码,并提出需要改进的地方
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;
 //...
}