Monday, January 5, 2009

课程设计终于搞定 :)

这几天为了调试课程设计的程序已经达到可以不去吃饭了, 好在终于弄完, 今天老师检查的时候还因为没来得及生成Window$版本的程序, 而不得不直接在Linux上演示. 晚上把Window$的也弄出来了, 所有的代码也都svn到了Google Code上了. 长出一口气, 呼~

期间在两个系统之间有一个不兼容的地方, 就是Window$下<conio.h>文件中的getch()这个函数. 由于Linux下没有那个头文件, 自然也就没有这个函数了. 但这个函数又是比较重要的一个, 不好轻易改动, 于是在CSDN的某博上找到了很好的解决办法, 用着挺不错的~

他自己写了个getch()函数, 功能上和Window$下的一样:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>

int getch()
{
  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;
}

Window$版的本来想用VC的编译器来弄的, 结果果然VC的编译器比较高级, 在Linux下gcc没有一个错误和警告, 到了VC下就出现了几十个错误和警告(- -). 最后没办法, 就直接用MinGW编译了, 不过运行起来没有Linux下那么稳定.

No comments:

Post a Comment