鱼C论坛

 找回密码
 立即注册
楼主: 冰封绝恋

[技术交流] 这是我在别人的自动关机源代码那得来的灵感

  [复制链接]
发表于 2012-8-17 14:33:14 | 显示全部楼层
呵呵 这样啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 14:48:08 | 显示全部楼层
那个“别人”是郝斌吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 16:57:54 | 显示全部楼层
本帖最后由 颓废的青春 于 2012-8-17 22:44 编辑


帮你改了下错误,正确代码如下:
#include <stdio.h>
#include <stdlib.h>

void main()
{

        int a;
        printf("按1后30分钟关机\n");
        printf("按2后45分钟关机\n");
        printf("按3后1小时关机\n");
        printf("按4键后取消关机命令(注意:要按有关机命令才能用)\n");

        printf("请选择:");

    scanf("%d",&a);

        if( a==1 )
        {
                system("shutdown -s -t 1800");
        }
        else if( a==2 )
        {
                system("shutdown -s -t 2700");
        }
        else if( a==3 )
        {
                system("shutdown -s -t 3600");
        }
        else   //这里什么都不用加,其含义是:剩下所用情况
        {
                system("shutdown -a");        /*就是这个取消关机命令*/
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-17 17:31:39 | 显示全部楼层
那我就谢谢大家了,非常感谢大家对我的帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-17 17:41:22 | 显示全部楼层
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

void main()
{
        
        int a=1, b=2, c=3, d=4;
        printf("按1后30分钟关机\n");
        printf("按2后45分钟关机\n");
        printf("按3后1小时关机\n");
        printf("按4键后取消关机命令(注意:要按有关机命令才能用)\n");
        printf("请选择:");

    scanf("%d",&a,&b,&c,&d);

        if( a == 1 )
        {
                system("shutdown -s -t 1800");
        }
        else if( b == 2 )
        {
                system("shutdown -s -t 2700");
        }
        else if( c == 3 )
        {
                system("shutdown -s -t 3600");
        }
        else
        {
                system("shutdown -a");
        }
}
程序又有问题了,问题还是老是运行最后的那个取消关机的命令!
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-17 17:51:56 | 显示全部楼层
还有我的理解是int a=1,b=2, c=3, d=4中的=1234可以去掉,因为scanf等于为这几个字母赋入了输入值,我说的对吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 17:52:46 | 显示全部楼层
这个问题没啥好研究的,直接给你改下代码
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

void main()
{
        
        int a;
        char ch;

        printf("按1后30分钟关机\n");
        printf("按2后45分钟关机\n");
        printf("按3后1小时关机\n");
        
        printf("请选择:");
        
    scanf("%d",&a);
        
        switch(a)
        {
        case 1: system("shutdown -s -t 1800");
                break;
        case 2: system("shutdown -s -t 2700");
                break;
        case 3: system("shutdown -s -t 3600");
                break;


        }

        fflush(stdin);

loop:        
        printf("是否取消关机命令【Y/N】(注意:要按有关机命令才能用)\n");
        scanf("%c",&ch);
        if( ch == 'Y')
        {
                system("shutdown -a");        /*就是这个取消关机命令*/
        }
        else if( ch == 'N')
        {
                printf("你没选择关机哦!");
                fflush(stdin);
                goto loop;
        }
        else
        {
                printf("就是【Y/N】选一个都不会?重新选一次吧!\n");
                fflush(stdin);
                goto loop;
        }
        
        
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 18:03:10 | 显示全部楼层
c写的?吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 18:05:29 | 显示全部楼层
没获得系统关机权限啊!怎么搞,正着急呢!有木有大牛指导一下{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 18:24:30 | 显示全部楼层
本帖最后由 向往 于 2012-8-17 18:28 编辑

楼主你好!

18#楼的朋友也说了  你这个程序存在严重的逻辑错误, 遗憾的是, 这位朋友并没有说到重点上.

我详细给你讲讲   【测试: 假如我输入的是 5 】
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
void main()
{
        
        int a=1, b=2, c=3, d=4;   // 你这里定义了4个变量, 而且还分别赋值了, 但是, 完全没有必要这样做
        printf("按1后30分钟关机\n");
        printf("按2后45分钟关机\n");
        printf("按3后1小时关机\n");
        printf("按4键后取消关机命令(注意:要按有关机命令才能用)\n");

        printf("请选择:");
    scanf("%d",&a,&b,&c,&d); // scanf函数不能输入一个数, 同时给4个变量赋值, 也就是说, 输入的数字5, 只能改变第一个参数a的值, 后面的b c d还是原来的 2, 3, 4

        if( a == 1 )  // 现在a的值是5了, 所以这个if语句不成立!
        {
                system("shutdown -s -t 1800");//不执行
        }
        else if( b == 2 ) // b还是原来的2, 这个if成立了
        {
                system("shutdown -s -t 2700"); // 被执行  
        }
        else if( c == 3 ) // 这个else if 不执行, 这个else所对应的if(b==2), 已经成立, 所以就不执行了
        {
                system("shutdown -s -t 3600"); // 不执行
        }
        else // 这个else对应的if(c==3)都没有执行, 所以这个不执行
        {
                system("shutdown -a");//不执行
        }
}
另外, 为什么if(c==3)是成立的, 但是不执行呢?
因为if(b==2)成立了, 后面的语句都是属于if(b==2)所对应的else的子语句, 所以不执行了.



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 18:27:59 | 显示全部楼层
冰封绝恋 发表于 2012-8-17 17:51
还有我的理解是int a=1,b=2, c=3, d=4中的=1234可以去掉,因为scanf等于为这几个字母赋入了输入值,我说的对 ...

scanf函数不能只输入一个数, 就同时给4个变量赋值, 也就是说, 输入的数字5, 只能改变第一个参数a的值, 后面的b c d还是原来的 2, 3, 4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 18:46:12 | 显示全部楼层

楼主, 鉴于你是初学者, 才学几天, 我给你改改, 改成你目前可以理解的

(估计你还没学switch语句吧, 这种情况下, 使用switch语句比if else方便多了)
#include <stdio.h>
#include <stdlib.h>

void main()
{

        int a; // 1个变量足够了, 且暂时不需要赋值

        printf("按1后30分钟关机\n");
        printf("按2后45分钟关机\n");
        printf("按3后1小时关机\n");
        printf("按4键后取消关机命令(注意:要按有关机命令才能用)\n");
        printf("请选择:");

                scanf("%d", &a); // 现在给 a 赋值

        if( a == 1 ) // 都使用a来判断
        {
                system("shutdown -s -t 1800");
        }
        else if( a == 2 ) 
        {
                system("shutdown -s -t 2700");
        }
        else if( a == 3 )
        {
                system("shutdown -s -t 3600");
        }
        else // 其实这种方法, 只要输入的数不是 1, 2, 3, 都会执行 取消关机的操作
        {
                system("shutdown -a");
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-17 20:09:23 | 显示全部楼层
向往 发表于 2012-8-17 18:46
楼主, 鉴于你是初学者, 才学几天, 我给你改改, 改成你目前可以理解的

(估计你还没学switch语句吧, 这 ...

其实我把整个C都学完的了,但可能质量不怎么好,所以不怎么会编,还有,我之所以不用switch语句那是因为我的笔记有问题,所以我不选择switch语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 21:13:46 | 显示全部楼层
为什么不直接用个while语句不就行了,..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 21:58:23 | 显示全部楼层
zquchs 发表于 2012-8-17 01:57
直接打开一个txt文件,输入shutdown -s -t 1800, 其中1800是秒,然后另存为一个bat格式的文件,以前经常用这 ...

好厉害~~学到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 22:15:00 | 显示全部楼层
冰封绝恋 发表于 2012-8-17 20:09
其实我把整个C都学完的了,但可能质量不怎么好,所以不怎么会编,还有,我之所以不用switch语句那是因为我 ...

其实 switch...case 语句 看着比较明显,思路清晰(swith 语句不难的)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 22:31:58 | 显示全部楼层
颓废的青春 发表于 2012-8-17 22:15
其实 switch...case 语句 看着比较明显,思路清晰(swith 语句不难的)

你看一下你的程序,逻辑也错误了,scanf的值只放入一个d变量,你在if语句中却判断a,b,c变量
应该只判断d变量,不然就scanf存放入abcd四个变量,不过不环保不低碳,一片垃圾
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 22:42:44 | 显示全部楼层
本帖最后由 颓废的青春 于 2012-8-17 22:44 编辑
メ㊣逆ご帅☆ 发表于 2012-8-17 22:31
你看一下你的程序,逻辑也错误了,scanf的值只放入一个d变量,你在if语句中却判断a,b,c变量
应该只判断d ...


不好意思,那个确实错了,谢谢提醒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 22:47:33 | 显示全部楼层
メ㊣逆ご帅☆ 发表于 2012-8-17 22:31
你看一下你的程序,逻辑也错误了,scanf的值只放入一个d变量,你在if语句中却判断a,b,c变量
应该只判断d ...

我的意思是 我原来那个用switch 写的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 23:14:46 | 显示全部楼层
看出了错误,吸收的经验!:lol:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 13:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表