Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Programme anhalten (anfänger)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.02.2004, 06:30 Uhr
~betula
Gast


Hallo,

ich bin blutiger Anfänger, aber auch schon etwas über "Hallo Word" hinaus.
Meine Frage:
Ein Programm anhalten, und dann mit Tastendruck fortfahren, das geht mit
getchar(); oder system("PAUSE");
bei mir aber nicht. vor return o; eingefügt, mag zwar der compiler meinen Code
aber das proggi überspringt einfach und ich lande wieder am ausgabepromt.
(#include <sdtlib.h> und <stdio.h> sind eingebunden)
Was zum Geier mach ich falsch ?

Und noch eine newbie-frage: wie füge ich hier Code ein ? Brauch ich dazu ein
ftp-Proggi ?
Ich arbeite mit linux 6.2, GNU-Compliler und emacs als editior.
Vielen vielen Dank und herzliche Grüße aus der grünen Branche, jawohl ich bin Gärtner!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.02.2004, 07:32 Uhr
~Benny
Gast


Also ich benutze immer getch(); zum anhalten (weiß nicht ob das dein Problem löst)

Code einfügen: Bei der Texteingabe steht links Quellcode einfügen, dort nimmst dir dann den cpp code und fügst deinen dazwischen ein. :o)

Schönen Tag
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.02.2004, 10:00 Uhr
Pablo
Supertux
(Operator)


Unter Linux gibt es keinen Befehl pause, oder PAUSE oder was auch immer. (@Benny getch() ist unter DOS in conio.h definiert, aber nur unter DOS gültig. Unter Linux ist getch() ein Teil der ncurses Biblio, mit #include <ncurses.h> zu inlcudieren)

Ich kann mir nicht vorstellen, dass es nicht mit getchar() klappt. Zeig deinen Code.

Du könntest auch scanf benutzen, so:

C++:
int main()
{
    int  anhalten;
    ....
    scanf("%d", &anhalten);
    return 0;
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.02.2004, 16:22 Uhr
Hans
Library Walker
(Operator)


Hallo Jungs,
was diese getchar() -konstruktion vor dem return 0; angeht, so solltet ihr dazu wissen, das man die nur dann braucht, wenn man mit einer Entwicklungsumgebung wie Visual C++ oder C++ Builder arbeitet. Denn diese Dinger haben die Eigenart, ein DOS-Fenster zu öffnen, das Programm darin ablaufen zu lassen, und das Fenster danach sofort wieder zu schliessen. Das getchar() am Ende dient also nur dazu, die IDE daran zu hindern, das Fenster sofort wieder zu schliessen. Ansonsten ist es nicht nötig.
Und unter Linux, braucht man es nicht, weil man da meist eine Konsole (ein Fenster mit Komandozeile) auf hat, in der man das Programm startet. Das kann man unter Windoof übrigens auch machen. Man lässt die IDE das Programm erstellen, und startet es in einem Fenster selber. Dann kann man sich das getch_was_auch_immer() am Ende sparen.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.02.2004, 18:48 Uhr
betula



Hallo, und vielen Dank für die prompten Antworten.

Nun denn, hier ein Beispiel meines Problems:

C++:
//Zeit.cpp - einfache Zeitberechnung

#include <iostream.h>
#include <stdio.h>
#include <time.h>
using namespace std;

int main()
{
  struct tm *zeit;
   time_t sekunde;
   char string[80];

   time/&sekunde);
   zeit = localtime(&sekunde);
   strftime(string, 80,
         "Es ist %H Uhr und %M Minuten (%Z) %A, %B %d 20%y", zeit);
   printf("%s\n",string);

   getchar();  // müßte doch eigentlich das proggi anhalten ?

    return 0;
}



Dieses simple proggi läuft, zeigt auch brav die Zeit an, nur hält dann eben
nicht an, sonder springt wieder auf den Eingabeprompt. Linux-Konsolenmäßig

Möchte aber, dass der user eben irgendeine Tase drücken muss, um fortzufahren.

Schon jetzt vielen herzlichen Dank für alle Hilfe,- tolle Angelegenheit, dieses Forum
gruss betula


Bearbeitung von Pablo:

Es ist einfach [ cpp ] zu benutzen. Bitte, CPP TAGS SELBER BENUTZEN!!!


Dieser Post wurde am 20.02.2004 um 22:01 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.02.2004, 01:28 Uhr
Hans
Library Walker
(Operator)



C++:
#include <iostream>
...
using namespace std;
>
C++:
while ((c = getchar()) != '\n')
          ;  

>
C++:
c = getchar();
while (c == EOF)
    c = getchar();  


das mit der Zeitberechnung weis ich jetzt nicht, - damit hab ich mich noch nicht beschäftigt. Aber wegen getchar() hab ich jetzt noch mal genauer nachgesehen. Da steht in der Beschreibung, das die Funktion am Dateiende oder im Falle eines Fehlers EOF zurück liefert. Der Fehlerfall ist der für uns interessante Teil. Die Funktion getchar() wird in Deinem Programm aufgerufen, und abgearbeitet. Weil in stdin, (das ist in diesem Fall die Eingabe von der Tastatur) zum Zeitpunkt des Aufrufs nichts drin steht, ist ein Fehler aufgetreten: Es liegen keine Zeichen vor. Also liefert die Funktion ein EOF zurück. Da dieses nicht weiter beachtet wird, wird das Programm mit return 0; beendet.
Damit es wartet, muss also eine Möglichkeit her, das Ergebniss des getchar()-Aufrufs zu überprüfen, und die Funktion sooft aufzurufen, bis sie was anderes als EOF zurück liefert. Das genau passiert in dieser wilden Schleifenkonstuktion|CPP||
Das Semikolon, das da allein in einer Zeile steht, zeigt an, das diese Schleife einen leeren Rumpf hat, d.h. in der Schleife passiert nicht viel. Das was da passiert, steckt ja schon in der Abbruch-Bedingung mit drin. Man könnte diese Schleife auch so schreiben|CPP||
Die Sache mit dem EOF hat noch einen Haken: Man erhält es erst, nachdem die Enter-Taste gedrückt wurde. Wenn Du vorher was anderes eingegeben hast, dann wird das auf dem Bildschirm ausgegeben. Wie man es anstellt, die Schleife gleich nach dem ersten Tastendruck abgebrochen wird, weis ich jetzt nicht so genau. Es wahrscheinlich auch Systemspezifisch werden...

Die Möglichkeit, das Ergebniss von getchar(); gleich auf CR (also drücken der Enter-Taste) auf CR zu prüfen, also|CPP||hilft übrigens nicht. Das hatte ich zuerst gedacht, aber ein ausprobieren zeigte, das ich da Falsch lag.

Zuletzt noch eine Anmerkung bezüglich C und C++

C++:
/* Bei den Variablendeklarationen noch [b]int c;[/b] dazu schreiben! */

while ((c = getchar()) == EOF)
          ;  


sind Bestandteile von C++. Dieses Programm ist aber ein reines C Programm, deshalb sind die C++ Elemente darin überflüssig. Denn #include <iostream> ist das C++ pendant zu #include <stdio.h> in C, und namespace gibt es nur in C++.
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 21.02.2004 um 01:33 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: