我正在使用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;
}
答案 0 :(得分:2)
“我尝试使用getch();
,但没有编译。”
请改用getchar();
。
答案 1 :(得分:1)
getchar()
是在程序退出之前暂停程序以检查程序输出的首选方法。但是你不能通过任何键退出你的程序。 输入是强制性的,getchar
仅在看到 Enter 键时返回。
Windows上更好的替代方案是实现您需要的东西 -
system("pause");
答案 2 :(得分:1)
您仍然可以使用自己喜欢的功能
getch();
但请不要忘记添加
#include<conio.h>
因为getch()函数位于conio.h头文件中。您忘了包含该函数的头文件。