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.