1

私はMSVisualStudio 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

あなたはまだあなたの好きな機能を使うことができます

getch();

ただし、追加することを忘れないでください

#include<conio.h>

getch()関数はconio.hヘッダーファイル内にあるためです。その関数のヘッダーファイルをインクルードするのを忘れました。

于 2012-05-29T07:52:19.947 に答える
1

getchar()プログラムの出力を調べるために、プログラムが終了する直前にプログラムを一時停止するための推奨される方法です。ただし、任意のキーを押してプログラムを終了することはできません。キーを見つけたときにのみ戻るEnterという意味で必須です。getcharEnter

あなたが正確に必要とすることを達成するための窓のより良い代替案はこれです-

system("pause");
于 2012-05-28T10:43:58.913 に答える