Anzeige:
Ergebnis 1 bis 7 von 7

Thema: C, abbruch einer Schleife

  1. #1
    Registrierter Benutzer
    Registriert seit
    22.10.2006
    Beiträge
    76

    C, abbruch einer Schleife

    Was für Möglichkeiten gibt es, um die Eingabe von neuen Werten jeder Zeit abbrechen zu können? Mir fält einfach nichts richtiges ein. Jedes mal fragen ob abgebrochen werden soll ist ja auch nicht sinnvoll...

    Danke schonmal!

    Code:
    	for (ii=0; ii<=19; ii++)
    	{
    		printf("Geben Sie die Daten des %d-ten Kassenzettels ein: \nArtikel: ", ii+1);
    		scanf(" %s", &Akassz[ii].AcArtikel);
    		printf("Preis: ");
    		scanf(" %f", &Akassz[ii].fPreis);
    		printf("ID: ");
    		scanf(" %i", &Akassz[ii].iID);
    		iArtAnz=ii;
    	}

  2. #2
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Bevor du ließt, prüfe auf EOF: feof(stdin)
    Wenn der User die Eingabe abbrechen will kann er es mit Strg+D (Unix; unter Windows mit Strg+Z) tun. Da ist aber stdin nicht wirklich geschlossen. Du kannst einfach weiterlesen. Sprich man kann als user mehrmals EOF auf stdin signalisieren.

    Andere (eventuell schönere?) Möglichkeit:
    Registriere einen signalhandler für SIGINT. Der soll ein entsprechendes Flag setzen, bei dem du dann die Schleife abbrichst. Dann kann der user mit Strg+C abbrechen. Siehe: man signal
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  3. #3
    Registrierter Benutzer
    Registriert seit
    22.10.2006
    Beiträge
    76
    ok, danke wie würde das implementiert genau aussehen? (ich kenne mich in C nicht gut aus)

  4. #4
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Dann informier dich - du wirst jawohl wissen, wie eine Suchmaschine funktioniert (das poste ich heute zum zweiten Mal ...).

    Fang mit feof() an. Das ist die einfachere Möglichkeit.
    Wenn du es nicht hinkriegst, das in dein Programm einzubauen, dann poste deinen neuen Quellcode.

  5. #5
    Registrierter Benutzer
    Registriert seit
    18.04.2008
    Beiträge
    26
    Hat die Instanzierung von ii ausserhalb der Schleife einen Sinn?

    for(int ii....) würde den Speicherereich nach Ablauf der Schleife wieder freigeben

  6. #6
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Zitat Zitat von Blutgerinsel Beitrag anzeigen
    for(int ii....) würde den Speicherereich nach Ablauf der Schleife wieder freigeben
    Dies ist aber nur OK wenn das Ganze C99 ist. C90 erlaubt keine Anfangsdeklaration in for-Schleifen. Über den Speicherbereich musst du dir hier eh keine Sorgen machen. ein int ist gerade mal 4 Bytes, das sollte zu verkraften sein. Abgesehen davon werden lokale Variablen meistens (IA32, AMD64, ...) auf dem Stack angelegt und werden daher beim Verlassen der entsprechenden Methode wieder freigegeben.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  7. #7
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Zitat Zitat von jeebee Beitrag anzeigen
    Dies ist aber nur OK wenn das Ganze C99 ist. C90 erlaubt keine Anfangsdeklaration in for-Schleifen. Über den Speicherbereich musst du dir hier eh keine Sorgen machen. ein int ist gerade mal 4 Bytes, das sollte zu verkraften sein. Abgesehen davon werden lokale Variablen meistens (IA32, AMD64, ...) auf dem Stack angelegt und werden daher beim Verlassen der entsprechenden Methode wieder freigegeben.
    Bzw. analysieren Kompiler den Kontrollfluss und wenn zB 2 Variablen zwar in der selben Funktion deklariert werden, aber nie überlappend verwendet werden, wird nur einmal speicher angefordert. Ist ein sehr einfacher Algorithmus zur Registerallokation. Wird wohl abgewandelt sicher auch direkt für die Stackrepräsentation der Varaible verwendet (wenn eine notwendig ist).
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •