代码之家  ›  专栏  ›  技术社区  ›  Andreas Grech

C:按键终止程序

c
  •  5
  • Andreas Grech  · 技术社区  · 15 年前

    在C语言中,我通常使用 getch() 函数等待一个键被按下,然后结束程序,但最近我读到,因为它不是一个标准函数,所以使用它是一种糟糕的编程实践。

    因此,不是以下内容:

    int main() {
        dosomething();
        getch(); //wait for the user to see the results and press a key to end
        return 0;
    }
    

    我该怎么做来替换 getch ?

    9 回复  |  直到 15 年前
        1
  •  8
  •   alexkr    15 年前

    getc(stdin); 从这个意义上说是便携式的

        2
  •  4
  •   John Bode    15 年前

    使用非标准的I/O功能并不是一个坏习惯 本身 ;如果要将此代码移植到不支持的其他平台,则会成为一个问题。 getch() .

    问题是,有 检测单个击键的标准库函数( getchar() fgetc() 缓冲并要求您在返回前按Enter键);您必须使用非标准的东西来完成此操作。如果只希望此代码在此特定平台上运行,请使用 GETCHE-() 如果这正是您需要的,请记住,此解决方案不一定适用于其他平台。如果您打算将此代码移植到不支持的平台 GETCHE-() ,隔离包装函数后面的系统特定调用,以便在移植代码时,只需要更改包装函数内的代码。

    int getKeystroke(void)
    {
      /**
       * Put platform-specific call here
       */
      return getch();
    }
    
    int main(void)
    {
      ... // do stuff here
      getKeystroke();
      return 0;
    }
    
        3
  •  2
  •   ndim    15 年前

    你可以把终点站的窗户修好,不让它消失。

        4
  •  1
  •   Robert Gamble    15 年前

    getchar() 是标准的,但由于线路缓冲,您仍需要按下 Enter 之前 getchar 返回。

        5
  •  1
  •   Nemanja Boric    15 年前

    我更喜欢从命令行运行程序。

        6
  •  1
  •   Wael Dalloul    15 年前

    我认为使用GETCH()是最常见的方法是保持控制台窗口关闭,但是在C++中,大多数有经验的程序员会建议您使用CIM.GET。

     std::cin.get();
    

    而不是:

    getch();
    
        7
  •  0
  •   Manish Sinha    15 年前

    您使用的是turbo C编译器吗? getch() 在那里被广泛使用。

    o如果希望程序等待,请在shell/terminal/prompt中运行二进制文件。导航到该目录并调用

    窗户:

    C:> executable.exe
    

    Linux:

    ~$ ./exec
    

    你可以使用 getchar() 唯一的问题是它被缓冲了。 GETCHE-() 没有缓冲。你可以做 GETCHARE() 也不需要缓冲,但是这样的代码不值得。我试过一次,但由于它的复杂性,我再也不想尝试了。

        8
  •  0
  •   user44556    15 年前

    除了其他答案外,您还可以在Windows中使用此选项,特别是当您希望等待按键完成程序时:

    system("pause");
    
        9
  •  0
  •   Vinit Dhatrak    15 年前

    只是想回答一些不同的问题,你可以用

    while(1) sleep(10);

    在主功能结束时(之前 return 0; )然后您可以按ctrl-c终止程序。我认为您不应该面对可移植性问题,我希望这也不是糟糕的编程实践:)