简体   繁体   中英

How to end a program by pressing a key?

I'm learning C with MS Visual Studio C++ and I can compile and run the program but it closes when it is done, I would like to add an interaction "Press any key to exit" or similar. How can it be done? I tried using getch(); but it didn't compile. Thanks

/* 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;
}

"I tried using getch(); but it didn't compile."
Use getchar(); instead.

getchar() is the preferred way of pausing the program just before it exits in order to examine the program output. But you cant exit your program by pressing any key though. Enter is mandatory in the sense that getchar returns only when it sees an Enter key.

A better alternative on windows to achieve the thing you precisely need is this-

system("pause");

You can still use your favorite function

getch();

but please do not forget to add

#include<conio.h>

because the getch() function is inside the conio.h headerfile. You forgot to include the header file for that function.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM