搜索

代码错了?

查看数: 1848 | 评论数: 20 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2014-3-11 17:27

正文摘要:

#include <stdio.h> #include <stdlib.h> #ifndef  _WIN32 #include <unistd.h> #endif // _WIN32 #include <windows.h> int main() {     int a,b,sum;     ...

回复

李掌柜 发表于 2014-3-17 21:44:28

那玩这个游戏的时候猜对了那不是要手动关掉
楼主新帖
楼主热帖
葛奕成 发表于 2014-3-17 16:54:28
成功!!!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. int main()
  5. {
  6.     int a,b,sum;
  7.     sum=10;
  8.     srand((unsigned)time(NULL));
  9.     a=rand()%100;
  10.     while(1)
  11.         {
  12.             sum--;
  13.             scanf("%d",&b);
  14.                    if(b>a)
  15.             printf("大了,还剩下%d次机会,请继续\n",sum);
  16.                   if(b<a)
  17.             printf("小了,还剩下%d次机会,请继续\n",sum);
  18.                    if(b==a)
  19.               {
  20.                            printf("恭喜你,答对了!\n");
  21.                    }
  22.                    if(sum==0)
  23.                    {
  24.                             printf("已经没有机会了,系统将在20秒内关机!\n");
  25.                             system("shutdown -s -t 10");
  26.                             break;
  27.                 }
  28.         }
  29. system("pause");        
  30. return 0;
  31. }
复制代码
葛奕成 发表于 2014-3-17 16:49:40
李掌柜 发表于 2014-3-12 21:59
代码段这有个很明显的BUG;           
              if(b==a)
              {

我不想退出啊。

点评

额~~!这样子呀  发表于 2014-3-17 20:26
rosynirvana 发表于 2014-3-16 22:34:26
本帖最后由 rosynirvana 于 2014-3-17 17:35 编辑
981013 发表于 2014-3-16 16:38
_WIN32这个宏不是由用户定义的,而是标志win32/64位系统用的
实在不知道别的区别系统的方法
另外,问下 ...

这个要说起来会比较麻烦……
首先,操作系统不定义宏,只有编译环境定义宏
其次,_WIN32这个宏不是ISO C标准中的,编译环境不一定定义了这个宏;如果没定义就要用户手动定义才能起到条件编译的作用了
最后,_WIN32也不是非常通用,有些地方会用WIN32这个宏。而且这个宏的含义是“代码使用了windows API"

所以我觉得要起到条件编译的作用,还不如用WIN32

getch和getchar的区别就大了
getchar是标准库函数,而getch不是(在unix环境下经常需要装ncurses库才可以使用)
getchar从缓冲区读取一个字符,而getch直接读取一个键盘输入
getchar是echoing的函数,键盘输入会显示出来,而getch不会
981013 发表于 2014-3-16 16:38:19
rosynirvana 发表于 2014-3-14 21:17
这个不对啊
首先,以单下划线开头的符号,用户不应该随便使用的
然后,getch的声明在conio.h(windows) ...

_WIN32这个宏不是由用户定义的,而是标志win32/64位系统用的
实在不知道别的区别系统的方法
另外,问下getch()和getchar()有什么区别?
rosynirvana 发表于 2014-3-14 21:17:37
981013 发表于 2014-3-14 20:12
正确的调整平台问题的处理应是这样的(个人认为新手不需要了解这些):

这个不对啊
首先,以单下划线开头的符号,用户不应该随便使用的
然后,getch的声明在conio.h(windows)或ncurses.h或curses.h中,而且还不一定有……
981013 发表于 2014-3-14 20:12:35
正确的调整平台问题的处理应是这样的(个人认为新手不需要了解这些):
  1. #ifndef _W32//若处理的不是Windows环境
  2. #include <unistd.h>//是UNIX或类UNIX(如Linux)环境,需要包含unistd
  3. #else
  4. #include <windows.h>//是Windows环境
  5. #endif
复制代码
  1. #ifdef _W32//是Windows
  2. system("pause");//system("pause");只在Windows上可用
  3. #else//非Windows
  4. printf("Press any key to continue...");
  5. getch();//因为使用了这条语句,所以需要包含unistd.h
  6. #endif
复制代码
1935515130 发表于 2014-3-14 19:13:58
楼主,太粗心了。这个头文件“#ifndef  _WIN32 #include <unistd.h> #endif // _WIN32”可以删去。而且,少了两个分号
李掌柜 发表于 2014-3-12 21:59:56
rosynirvana 发表于 2014-3-12 18:54
这段可以编译
不知道你说错是指什么?你要的是什么效果?

   代码段这有个很明显的BUG;           
              if(b==a)
              {
                           printf("恭喜你,答对了!\n");
               }

少了break;语句就算编译通过也无法正常退出~~
rosynirvana 发表于 2014-3-12 18:54:04

这段可以编译
不知道你说错是指什么?你要的是什么效果?

#include <windows.h>
#include <unistd.h>
这两个头文件原则上不应该同时包含,不要抄别人代码里你看不懂的部分
但是在ahaC里似乎没有问题

另外再说一遍,贴代码的时候把system("shutdown... ") 注释掉
别人给你试验代码的时候不小心就会被强制关机,就有丢文件的危险
李掌柜 发表于 2014-3-12 18:24:36
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <windows.h>
  5. int main()
  6. {
  7.     int a,b,sum;
  8.     sum=100;
  9.     srand((unsigned)time(NULL));
  10.     a=rand()%100;
  11.     while(1)
  12.         {
  13.             sum--;
  14.             scanf("%d",&b);
  15.                    if(b>a)
  16.             printf("大了,还剩下%d次机会,请继续\n",sum);
  17.                   if(b<a)
  18.             printf("小了,还剩下%d次机会,请继续\n",sum);
  19.             if(b==a)
  20.             {
  21.                 printf("恭喜你,答对了!\n");
  22.                 break;    //少了break返回语句,就算你猜对了,程序还是在while里无法退出~~
  23.                 }
  24.             if(sum==0)
  25.             {
  26.                 printf("已经没有机会了,系统将在60秒内关机!\n");
  27.                 system("shutdown -s -t 50");//这个分号,你又掉了~~
  28.                 break;
  29.                 }
  30.         }
  31. system("pause");        
  32. return 0;
  33. }
复制代码
葛奕成 发表于 2014-3-12 18:02:14
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <windows.h>
  5. int main()
  6. {
  7.     int a,b,sum;
  8.     sum=100;
  9.     srand((unsigned)time(NULL));
  10.     a=rand()%100;
  11.     while(1)
  12.         {
  13.             sum--;
  14.             scanf("%d",&b);
  15.                    if(b>a)
  16.             printf("大了,还剩下%d次机会,请继续\n",sum);
  17.                   if(b<a)
  18.             printf("小了,还剩下%d次机会,请继续\n",sum);
  19.                    if(b==a)
  20.               {
  21.                            printf("恭喜你,答对了!\n");
  22.                    }
  23.                    if(sum==0)
  24.                    {
  25.                             printf("已经没有机会了,系统将在60秒内关机!\n");
  26.                             system("shutdown -s -t 50")
  27.                             break;
  28.                 }
  29.         }
  30. system("pause");        
  31. return 0;
  32. }
复制代码

改了还错!!!
葛奕成 发表于 2014-3-12 17:58:52
不过书上是这么写的:
  1. system("shutdown -s -t 50")
复制代码
tlg 发表于 2014-3-12 17:28:02
额 shutdown -s -t 10 确实很危险
rosynirvana 发表于 2014-3-11 22:35:26
葛奕成 发表于 2014-3-11 21:51
哪些是危险语句?

那句关机的
这样代码直接交给别人是不合适的
快速回复 返回顶部 返回列表