如何通过按键结束程序?

时间:2012-05-28 10:40:48

标签: c visual-studio-2010 visual-c++ exit

我正在使用MS Visual Studio C ++学习C,我可以编译并运行该程序,但是当它完成时它会关闭,我想添加一个交互“按任意键退出”或类似。怎么做到呢?我尝试使用getch();但它没有编译。感谢

/* Inkludera filer som innehåller definitioner av de biblioteks-
   funktioner som används i programmet. Användningen av #include
   i C-program har vissa likheter med Javas import-uttryck.
*/
#include "StdAfx.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>


/* Definiera N_POINTS till talet 4 */
#define N_POINTS        4

/* Definiera en datastruktur Point som kan innehålla en 2-D koordinat */
typedef struct {
  double x, y;
} Point;

/* Definiera en funktion distance() som räknar ut avståndet från origo till
   en punkt. Denna funktion nyttjar Pythagoras sats och funktionen
   sqrt() från matematikbiblioteket. sqrt() beräknar kvadratroten av
   ett tal.
*/
double distance(Point p) {
  double r;
  r = sqrt(p.x*p.x + p.y*p.y);
  return r;
}

/* bubblesort() tar en vektor med punkter samt vektorns längd som
   argument och sorterar punkterna i vektorn efter deras avstånd till
   origo med största avstånd först, med hjälp av bubblesort-algoritmen.
   Denna algoritm är långsam och passar dåligt när långa vektorer
   ska sorteras; den är dock enkel att implementera och passar därför
   bra till detta exempel.
*/
void bubblesort(Point points[], int length) {
  Point swap;
  int i, j;

  for(i = 0; i<length-1; i++)
    for(j = i+1; j<length; j++)
      if( distance(points[i]) < distance(points[j]) ) {
        swap = points[i];
        points[i] = points[j];
        points[j] = swap;
      }
}

/* main() är den funktion där programmet börjar, precis som i ett javaprogram.
   main() ska alltid returnera ett heltal, int. */
int main(void) {

/* filename blir en vektor med 80 tecken. Teckenvektorer används i C
   för att representera strängar. */
  char filename[80];

/* points blir en vektor av Point med N_POINTS element. */
  Point points[N_POINTS];

/* FILE * är en adress till en datastruktur av typen FILE. En FILE
   används för att representera filer i C. */
  FILE *file;

  int i;

/* printf() är en funktion som skriver ut text i terminalfönstret. */
  printf("Detta program läser in %d koordinater och sorterar dem.\n",N_POINTS);
printf("Sedan skrivs koordinaterna ut på en fil.\n");

  for(i = 0; i<N_POINTS; i++) {
    printf("Ange koordinat %d (format: x y): ", i+1);

/* scanf() används för att läsa in text och tal från tangentbordet. */
    scanf("%lf %lf", &points[i].x, &points[i].y);
}

/* Sortera koordinaterna genom att anropa bubblesort-funktionen ovan. */
  bubblesort(points, N_POINTS);

  printf("Nu är punkterna sorterade.\n");
  printf("Vilken fil ska de skrivas ut på? ");
  scanf("%s", filename);

/* Öppna en fil med det namn som finns i strängen filename. */
  file = fopen(filename, "w");

/* Om file är NULL så gick det inte att öppna filen. */
  if(file == NULL) {
    printf("Det gick inte att öppna filen %s.\n", filename);
} else {
    for(i = 0; i<N_POINTS; i++)
      /* fprintf() är som printf() med skriver till en fil. */
      fprintf(file, "Koordinat %2d: %10.3lf %10.3lf\n",
i+1, points[i].x, points[i].y);

/* När punkterna är skrivna på filen så ska den stängas. */
    fclose(file);

    printf("Nu är koordinaterna utskrivna på filen %s.\n", filename);
printf("För att se innehållet i filen kör kommandot: more %s\n", filename);
}

/* main() ska returnera 0 (noll) om programmet inte råkade ut för något
   fel. Det borde kanske ha returnerat 1 (ett) om det inte gick att
   öppna filen, eller frågat om ett annat filnamn, men det får bli en
   övning till läsaren.
*/
  return 0;
}

3 个答案:

答案 0 :(得分:2)

“我尝试使用getch();,但没有编译。”
请改用getchar();

答案 1 :(得分:1)

getchar()是在程序退出之前暂停程序以检查程序输出的首选方法。但是你不能通过任何键退出你的程序。 输入是强制性的,getchar仅在看到 Enter 键时返回。

Windows上更好的替代方案是实现您需要的东西 -

system("pause");

答案 2 :(得分:1)

您仍然可以使用自己喜欢的功能

getch();

但请不要忘记添加

#include<conio.h>

因为getch()函数位于conio.h头文件中。您忘了包含该函数的头文件。