W·Y 发表于 2015-8-19 00:09:44

【C】气死C老师系列,求教优化。【槽点极多】

#include <stdio.h>
#include <stdlib.h>
int        if_and();
int        if_huo();
int        if_fei();
int        if_3();
int cls();
int main()
{
        int num;
        char yn;
start:
        cls();
        printf("请输入数字进入你所想要的区域\n1.if嵌套与elseif教学。\n2.相同条件教学\n3.当一个条件满足时教学\n4.!x判断x是否为0,是的话,!x为1,否则!x为0。\n");
        scanf("%d",&num);
        if (num == 1)
                if_3();
        else if (num == 2)
                if_and();
        else if(num==3)
                if_huo();
        else if(num==4)
                if_fei();               
        else
        {
                printf("输入错误,请重新输入。");
                goto start;
        }

ynb:printf("y继续执行程序,n退出程序。\nPs:如果第一次输入的是回车,第二次输入前请先按下回车:");
        scanf("%c",&yn);
        scanf("%c",&yn);
        if('y' == yn || 'Y' == yn)
        {
                goto start;
        }
        else if('n' == yn || 'N' == yn)
        {
                printf("程序结束\n");
                return 0;
        }
        else
        {
                printf("输入有误,请重新输入。");
                goto ynb;
        }
       
}
int if_3()
{
        int xf;
loop:
        printf("请输入您拥有的金额,要求为10的平方数,负数随便输:\n");
        scanf("%d",&xf);
        if (xf < 0)
        {
                printf("已经濒临灭绝的地步了,要加油啊,不过不能放弃生命哦\n");
        }
        else
        {
                if(xf >= 0)
                {
                        if(xf == 0)
                        {
                                printf("还不行哦,要加油,你会生存不下去的。\n");
                        }
                        else if(xf == 10)
                        {
                                printf("还好,勉强能活几天,试试再辛苦一点赚钱吧\n");
                        }
                        else if(xf == 100)
                        {
                                printf("还好,慢慢来,不要因为有一点小钱而得意\n");
                        }
                        else if(xf == 1000)
                        {
                                printf("不错,偶尔去吃点几元的小吃吧,继续努力!\n");
                        }
                        else if(xf == 10000)
                        {
                                printf("投资点地摊试试吧,也许会更有钱的哦。\n");
                        }
                        else if(xf == 100000)
                        {
                                printf("不错,可以租个地方干点什么了。\n");
                        }
                        else if(xf == 1000000)
                        {
                                printf("不错哦,开个大点的公司吧!,可以买电钢琴了。\n");
                        }
                        else if(xf == 10000000)
                        {
                                printf("这时候应该基本稳定下来了吧,继续加油吧!哦,对了,你可以买斯坦威钢琴了\n");
                        }
                        else if(xf >= 100000000)
                        {
                                printf("不错,到了今天你应该已经不需要我了。\n");
                        }
                        else
                        {
                                printf("请输入10的平方数!\n");
                                goto loop;
                        }
                }               
        }               
}
int if_and()
{
        int x,y;
        printf("请输入x和y的值,x=1,y=2,当有一个不吻合就会输出不吻合:\n");
        printf("请输入x的值:");
        scanf("%d",&x);
        printf("请输入y的值:");
        scanf("%d",&y);
        if(x==1 && y==2)
                printf("条件全部吻合\n");
        else
                printf("有一个或多个条件不吻合\n");
}
int if_huo()
{       
        int x,y;
        printf("当x=1,y=2有一个条件吻合时即输出吻合\n");
        printf("请输入x的值:");
        scanf("%d",&x);
        printf("请输入y的值:");
        scanf("%d",&y);
        if(x==1 || y==2)
                printf("全部吻合或者其中一个条件吻合\n");
        else
                printf("全不吻合\n");
}               
int if_fei()
{
        int x;
        printf("你会看见相反的答案......\n");
        printf("请输入x的值:");
        scanf("%d",&x);
        if(!x==1)
                printf("x为0\n");
        else
                printf("x不为0\n");
}
int cls()
{
        system("cls");
        printf("清屏完毕\n");
}

0xAA55 发表于 2015-8-19 00:30:06

这大概没啥可优化的。。
另外你这个清屏居然还会显示“清屏完毕”

W·Y 发表于 2015-8-19 02:37:47

0xAA55 发表于 2015-8-19 00:30
这大概没啥可优化的。。
另外你这个清屏居然还会显示“清屏完成”

听说最好少用goto,我这里到处都是goto,还有如果第一次按了回车,第二次就要多输入一次的bug....感觉写的是不是挺烂的......

0xAA55 发表于 2015-8-19 20:18:24

W·Y 发表于 2015-8-19 02:37
听说最好少用goto,我这里到处都是goto,还有如果第一次按了回车,第二次就要多输入一次的bug....感觉写 ...

其实主要是C++最忌讳用goto,因为这个涉及到类构造、析构、变量初始化的逻辑位置问题。
C语言就好多了,用goto也没什么错,但是goto如果用得太多(甚至各种往回跳)那就不应该了。

cyycoish 发表于 2015-8-19 21:01:50

加油!
。。。。其实还是习惯循环一点点。。。

coffee 发表于 2015-8-19 22:32:32

不是在一堆循环里直接改变流程或者非用不可的话,goto是能不用最好别用,在企业的话就和工资挂钩了

W·Y 发表于 2015-8-19 23:18:23

0xAA55 发表于 2015-8-19 20:18
其实主要是C++最忌讳用goto,因为这个涉及到类构造、析构、变量初始化的逻辑位置问题。
C语言就好多了, ...

嗯,受教了!

W·Y 发表于 2015-8-19 23:18:53

cyycoish 发表于 2015-8-19 21:01
加油!
。。。。其实还是习惯循环一点点。。。

刚刚学习,还不知道循环怎么写:D

W·Y 发表于 2015-8-19 23:19:09

coffee 发表于 2015-8-19 22:32
不是在一堆循环里直接改变流程或者非用不可的话,goto是能不用最好别用,在企业的话就和工资挂钩了 ...

原来如此,谢大神指教!

cyycoish 发表于 2015-8-21 16:55:03

@0xAA55 我发现有时候为了硬往结构化程序设计里边套,而不用goto语句,写出来的程序越难以理解
所以说正确少量地使用goto应该是好习惯

0xAA55 发表于 2015-8-21 19:02:42

cyycoish 发表于 2015-8-21 16:55
@0xAA55 我发现有时候为了硬往结构化程序设计里边套,而不用goto语句,写出来的程序越难以理解
所以说正确 ...

其实应该做成子程序的就得做成子程序,事实上这样效率更高(过小的子程序会被编译器自动内联,而有一定体积的子程序则会被CPU缓存起来。)

W·Y 发表于 2015-8-24 17:08:16

0xAA55 发表于 2015-8-21 19:02
其实应该做成子程序的就得做成子程序,事实上这样效率更高(过小的子程序会被编译器自动内联,而有一定体 ...

SOGA..原来如此。。

13*0217 发表于 2017-9-8 18:52:31

cyycoish 发表于 2015-8-21 16:55
@0xAA55 我发现有时候为了硬往结构化程序设计里边套,而不用goto语句,写出来的程序越难以理解
所以说正确 ...

用下goto,程序有可能更清晰易读。
页: [1]
查看完整版本: 【C】气死C老师系列,求教优化。【槽点极多】