免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10764 | 回复: 17

[求小程序]打印"Press any key to continue"然后任意键退出 [复制链接]

论坛徽章:
0
发表于 2008-10-09 23:48 |显示全部楼层
10可用积分
如题,在windows下面的GCC(dev C++ 4.9.9.2)可以这样:
int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}

程序运行的结果是:
------------------------
请按任意键继续......
然后我随便按一个键退出了。

我在linux(rh)/UNIX(sun)上面编译这个程序,运行就报错,说是没有"PAUSE"这个程序。我which了一下,也没有叫做pause的程序。那么我应该如何在*nix平台实现同样的功能呢? 也就是程序等待用户按任意键。有没有比较简短的方法? 要求: 不要先写一个脚本然后让system去调这个脚本。

谢谢,10分相送!

论坛徽章:
0
发表于 2008-10-09 23:48 |显示全部楼层

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <termios.h>

  4. int main()
  5. {
  6.         struct termios old_tio, new_tio;
  7.         unsigned char c;

  8.         tcgetattr(STDIN_FILENO,&old_tio);

  9.         new_tio=old_tio;

  10.         new_tio.c_lflag &=(~ICANON & ~ECHO);

  11.         tcsetattr(STDIN_FILENO,TCSANOW,&new_tio);

  12.         getchar();

  13.         tcsetattr(STDIN_FILENO,TCSANOW,&old_tio);

  14.         return 0;
  15. }
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2008-10-09 23:51 |显示全部楼层
getchar()?

论坛徽章:
0
发表于 2008-10-09 23:57 |显示全部楼层
原帖由 jeanlove 于 2008-10-9 23:48 发表
如题,在windows下面的GCC(dev C++ 4.9.9.2)可以这样:
int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}

程序运行的结果是:
------------------------
请按任意 ...


试试这个:

  1. #include<stdio.h>
  2. #include<unistd.h>
  3. int main()
  4. {
  5.                 printf("Press any key to continue\n");
  6.                 system("stty raw");
  7.                 getchar();
  8.                 system("stty cooked");
  9.                 putchar('\n');
  10.                 return 0;
  11. }

复制代码

论坛徽章:
0
发表于 2008-10-09 23:59 |显示全部楼层
原帖由 lenovo 于 2008-10-9 23:51 发表
getchar()?

这个不行,得回车,linux下没看到有与getch()功能相同的函数,好像需要修改输入缓冲区什么的

论坛徽章:
0
发表于 2008-10-10 00:01 |显示全部楼层

回复 #3 scutan 的帖子

学习了,原来是改这个

论坛徽章:
0
发表于 2008-10-10 09:10 |显示全部楼层
stty raw是不是设置终端?

论坛徽章:
0
发表于 2008-10-10 09:58 |显示全部楼层
原帖由 雨过白鹭洲 于 2008-10-10 09:10 发表
stty raw是不是设置终端?

嗯。是的。

论坛徽章:
0
发表于 2008-10-10 12:25 |显示全部楼层
原帖由 scutan 于 2008-10-9 23:57 发表


试试这个:

#include
#include
int main()
{
                printf("Press any key to continue\n");
                system("stty raw");
                getchar();
                syste ...

不过我想知道,如果不用system函数,用*nix自己的ioctl相关的函数调用,能否实现这一功能?

谢谢!

论坛徽章:
0
发表于 2008-10-10 12:30 |显示全部楼层
原帖由 jeanlove 于 2008-10-10 12:25 发表

不过我想知道,如果不用system函数,用*nix自己的ioctl相关的函数调用,能否实现这一功能?

谢谢!


当然可以了。就是设置一下终端属性的问题,可以参考一下APUE上面的终端I/O一章。有详细的讲解。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP