linux c++程序暂停问题

chenlei posted @ 2010年1月23日 02:09 in Linux , 10708 阅读

今天在看c++时发现了这样一个问题:

在WINDOWS中,可以用这样写来实现程序的暂停

 

#include <iostream>
int main()
{
    cout << "Hello world!!" << endl;
    system("pause");
}

可是在LINUX中却不能做到,呵呵,这却实难到我了。

我上网查了一下,有牛人在/usr/include下加了头文件conio.h

 

#include <termios.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>

int getch(void)
{
    int c=0;
    struct termios org_opts, new_opts;
    int res=0;
    /*---- store old settings ----*/
    res=tcgetattr(STDIN_FILENO, &org_opts);
    assert(res==0);
    /*---- set new terminal parms ----*/
    memcpy(&new_opts, &org_opts, sizeof(new_opts));
    new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);
    tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
    c=getchar();
    /*---- restore old settings ----*/
    res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);
    assert(res==0);
    return c;
}

 

 

但是我在应用时,没有成功!

呵呵,C的到是有很多方法 http://blog.chinaunix.net/u2/67401/showart.php?id=576410

我这儿还有一个代码实现了:

 

#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>

int getch();
void press_key();

int main()
{
	printf("Hello world!\n");
	press_key();
	return 0;
}

void press_key()
{
	printf("Press any key to continue...\n");
	getch();
}

int getch()
{
	struct termios tm,tm_old;
	int fd = STDIN_FILENO,c;

	if (tcgetattr(fd, &tm) < 0)
	{
		return -1;
	}

	tm_old = tm;
	cfmakeraw(&tm);

	if (tcsetattr(fd,TCSANOW, &tm) < 0)
	{
		return -1;
	}

	c = fgetc(stdin);

	if (tcsetattr(fd,TCSANOW,&tm_old) < 0) 
	{
		return -1;
	}
	return c;
}

 

 

呵呵,多多发现,多多学习吧!!

 

 

 

 

  • 无匹配
  • 无匹配
Avatar_small
Frederick Zhang 说:
2012年3月06日 03:31

表示Ubuntu 11.10下使用Code::Blocks的GNU GCC编译器,尝试后失败……


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter