首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-08-17 
请评价一下这段代码,并提出需要改进的地方C/C++ code#include stdio.hchar get_choice (void)void Add

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

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;
 //...
}


因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
whlie (!feof(f)) {
 a=fgetc(f);
 //...
 b=fgetc(f);//可能此时已经feof了!
 //...
}
而这样写就没有问题:
whlie (1) {
 a=fgetc(f);
 if (feof(f)) break;
 //...
 b=fgetc(f);
 if (feof(f)) break;
 //...
}
类似的例子还可以举很多。

[解决办法]
看你什么要求咯,一个程序永远不可能完美,总有可以改进的地方。
在什么地方定义,个人觉得PC上没啥关系吧,不过传值会好一些。
个人觉得 初学 考虑下 怎么让代码简练 就可以了吧。

参考赵老师的+-*/代码。可以找楼上要。
[解决办法]
程序,简单易懂,易维护。。。

热点排行