鱼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 编辑


帮你改了下错误,正确代码如下:

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void main()
  4. {

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

  10.         printf("请选择:");

  11.     scanf("%d",&a);

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

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

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

  14.         if( a == 1 )
  15.         {
  16.                 system("shutdown -s -t 1800");
  17.         }
  18.         else if( b == 2 )
  19.         {
  20.                 system("shutdown -s -t 2700");
  21.         }
  22.         else if( c == 3 )
  23.         {
  24.                 system("shutdown -s -t 3600");
  25.         }
  26.         else
  27.         {
  28.                 system("shutdown -a");
  29.         }
  30. }
复制代码

程序又有问题了,问题还是老是运行最后的那个取消关机的命令!
捕获.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 | 显示全部楼层
这个问题没啥好研究的,直接给你改下代码
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <stdlib.h>

  4. void main()
  5. {
  6.        
  7.         int a;
  8.         char ch;

  9.         printf("按1后30分钟关机\n");
  10.         printf("按2后45分钟关机\n");
  11.         printf("按3后1小时关机\n");
  12.        
  13.         printf("请选择:");
  14.        
  15.     scanf("%d",&a);
  16.        
  17.         switch(a)
  18.         {
  19.         case 1: system("shutdown -s -t 1800");
  20.                 break;
  21.         case 2: system("shutdown -s -t 2700");
  22.                 break;
  23.         case 3: system("shutdown -s -t 3600");
  24.                 break;


  25.         }

  26.         fflush(stdin);

  27. loop:       
  28.         printf("是否取消关机命令【Y/N】(注意:要按有关机命令才能用)\n");
  29.         scanf("%c",&ch);
  30.         if( ch == 'Y')
  31.         {
  32.                 system("shutdown -a");        /*就是这个取消关机命令*/
  33.         }
  34.         else if( ch == 'N')
  35.         {
  36.                 printf("你没选择关机哦!");
  37.                 fflush(stdin);
  38.                 goto loop;
  39.         }
  40.         else
  41.         {
  42.                 printf("就是【Y/N】选一个都不会?重新选一次吧!\n");
  43.                 fflush(stdin);
  44.                 goto loop;
  45.         }
  46.        
  47.        
  48. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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 】


  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <stdlib.h>
  4. void main()
  5. {
  6.         
  7.         int a=1, b=2, c=3, d=4;   // 你这里定义了4个变量, 而且还分别赋值了, 但是, 完全没有必要这样做
  8.         printf("按1后30分钟关机\n");
  9.         printf("按2后45分钟关机\n");
  10.         printf("按3后1小时关机\n");
  11.         printf("按4键后取消关机命令(注意:要按有关机命令才能用)\n");

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

  14.         if( a == 1 )  // 现在a的值是5了, 所以这个if语句不成立!
  15.         {
  16.                 system("shutdown -s -t 1800");//不执行
  17.         }
  18.         else if( b == 2 ) // b还是原来的2, 这个if成立了
  19.         {
  20.                 system("shutdown -s -t 2700"); // 被执行  
  21.         }
  22.         else if( c == 3 ) // 这个else if 不执行, 这个else所对应的if(b==2), 已经成立, 所以就不执行了
  23.         {
  24.                 system("shutdown -s -t 3600"); // 不执行
  25.         }
  26.         else // 这个else对应的if(c==3)都没有执行, 所以这个不执行
  27.         {
  28.                 system("shutdown -a");//不执行
  29.         }
  30. }
复制代码
另外, 为什么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方便多了)


  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void main()
  4. {

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

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

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

  12.         if( a == 1 ) // 都使用a来判断
  13.         {
  14.                 system("shutdown -s -t 1800");
  15.         }
  16.         else if( a == 2 )
  17.         {
  18.                 system("shutdown -s -t 2700");
  19.         }
  20.         else if( a == 3 )
  21.         {
  22.                 system("shutdown -s -t 3600");
  23.         }
  24.         else // 其实这种方法, 只要输入的数不是 1, 2, 3, 都会执行 取消关机的操作
  25.         {
  26.                 system("shutdown -a");
  27.         }
  28. }

复制代码
想知道小甲鱼最近在做啥?请访问 -> 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, 2024-4-28 03:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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