1

我正在使用 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;
}
4

3 回答 3

2

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

于 2012-05-28T10:43:42.360 回答
1

getchar()是在程序退出之前暂停程序以检查程序输出的首选方式。但是你不能按任意键退出你的程序。Enter是强制性的,它只在看到一个键getchar时才返回。Enter

在 Windows 上实现您确切需要的东西的一个更好的选择是 -

system("pause");
于 2012-05-28T10:43:58.913 回答
1

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

getch();

但请不要忘记添加

#include<conio.h>

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

于 2012-05-29T07:52:19.947 回答