<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Dickes Problem]]></title><description><![CDATA[<p>Hallo Leute</p>
<p>Ih habe ein dickes Problem.<br />
Mein Programm läuft bis auf die Suchefunktion relativ gut.<br />
Er findet den richtigen Wein nicht.Wenn ich den Wein 2 suche zeigt er mir den 3 Wein.<br />
Könnt ihr mir bitte helfen? Hab schon den ganzen Tag probiert.</p>
<pre><code>#include &lt;iostream.h&gt;
#include &lt;iomanip.h&gt;
#include &lt;fstream.h&gt;
#include &lt;string.h&gt;
#include &lt;conio.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;dos.h&gt;

//Definition der Funktionstasten
#define F1 1
#define F2 2
#define F3 3
#define F4 4
#define F10 10

#define EINZUGMENU 15
#define EINZUGTEXT 15

//Globale Datendefinitionen
const short MAXCHAR = 80;
const int MAXWEINE = 40;

// Struktur für Datum format
struct datum
{
	int tag;
	int monat;
	int jahr;
};

// Struktur für Informationen der SWeine
struct SWein
{
	char art[MAXCHAR];                //Zeichenkette für Wein art
   int wnr;                          //					  Wein NR.
   char name[MAXCHAR];               //					  Wein Namen
   char jahrgang[MAXCHAR];           //					  Wein Jahrgang
   char herkunftsland[MAXCHAR];      //					  Wein Herkunftsland
   char einlagerungsdatum;           //					  Wein Einlagerungsdatum
  	datum datum;
   int stueckzahl;                   //                 Wein Stueckzahl
   double preis;                     //					  Wein Preis
};

//Funktionsdeklarationen
int menu();
void weinErfassen(SWein sammlung[], int &amp;aktAnz);
void weinAnzeigen(SWein sammlung[], int aktAnz);
void weinAendern(SWein sammlung[], int aktAnz);

//Hilfsfunktionen
int fileRead(char* strfile,  const SWein* meineweine, int &amp;anz);
int fileSave(char* strfile, SWein* meineweine, int anz);
int fkt_taste();

// Hauptprogramm
int main()

{  //Statischer Speicher fuer MAXWEINE
   struct SWein keller[MAXWEINE];
   int aktAnz = 0, auswahl;

   //Daten aus Datei einlesen
   fileRead(&quot;weinkatalog.dat&quot;,keller,aktAnz);
   do{
   	auswahl = menu();
      switch(auswahl){
      	case F10:	//Anwendung beenden
         	clrscr();
            fileSave(&quot;weinkatalog.dat&quot;,keller, aktAnz); //Daten werden bei Programmende gespeichert bzw.
            cout &lt;&lt; &quot;Zum Wohl...&quot;;                     //Aktualisiert
            sleep(1);
            break;
			case F1:	//Daten Weine erfassen
         	cout &lt;&lt; endl &lt;&lt; aktAnz;
            getch();
         	weinErfassen(keller,aktAnz);
         	break;
         case F2:	//Daten aller Weine anzeigen
         	clrscr();
         	weinAnzeigen(keller, aktAnz);
         	break;
         case F3:	//Weine suchen und den Lagerstand aendern.
         	clrscr();
         	weinAendern(keller,aktAnz);
         	break;
         case F4: //Eingegebene Daten Sichern/Aktualisieren
         	clrscr();
         	fileSave(&quot;weinkatalog.dat&quot;,keller, aktAnz);
            cout &lt;&lt; &quot;Daten gesichert&quot;&lt;&lt;endl;
            getch();
            break;
         default:	//Alle anderen Faelle
         	break;
   	}
   }while(auswahl != F10);
   return(0);
}

//Funktionsdefinitionen
//Hauptfunktionen
//Menufunktione gibt Menue aus und liest Auswahl des Benutzers ein und gibt diese
//als int zuerueck
int menu(){
	//Lokale Daten
   char auswahl;
   do{
		clrscr();
      cout.setf(ios::right,ios::adjustfield);
      cout &lt;&lt; setw(EINZUGMENU) &lt;&lt; &quot;&quot; &lt;&lt; &quot;Menue Weinverwaltung\n\n\n&quot;;
      cout &lt;&lt; setw(EINZUGMENU) &lt;&lt; &quot;F 1&quot; &lt;&lt; &quot;\tWeine erfassen&quot; &lt;&lt; endl &lt;&lt; endl;
      cout &lt;&lt; setw(EINZUGMENU) &lt;&lt; &quot;F 2&quot; &lt;&lt; &quot;\tWeine anzeigen&quot; &lt;&lt; endl &lt;&lt; endl;
      cout &lt;&lt; setw(EINZUGMENU) &lt;&lt; &quot;F 3&quot; &lt;&lt; &quot;\tWeine aendern&quot; &lt;&lt; endl &lt;&lt; endl;
      cout &lt;&lt; setw(EINZUGMENU) &lt;&lt; &quot;F 4&quot; &lt;&lt; &quot;\tEingegebene Daten Sichern&quot; &lt;&lt; endl &lt;&lt; endl;
      cout &lt;&lt; setw(EINZUGMENU) &lt;&lt; &quot;F10&quot; &lt;&lt; &quot;\tBeenden&quot; &lt;&lt; endl &lt;&lt; endl;
      //Bedienung ueber Funktionstasten F1 - F10, fuer F1 bekommt man 1 zuerueck usw.
      auswahl = fkt_taste();
   }while(auswahl &lt; F1 || auswahl &gt; F10);
 	return auswahl;
}

//Funktionsdefinitionen (Implementierungen)
//Funktion zum Weine erfassen.
void weinErfassen(SWein sammlung[], int &amp;aktAnz)
{
 char x;
 clrscr();

   do
   {
   	cout &lt;&lt; &quot;---------------------\n&quot;;
      cout &lt;&lt; &quot;Neuer Wein erfassen &quot;&lt;&lt;endl;
      cout &lt;&lt; &quot;---------------------\n&quot;;
      cout &lt;&lt; &quot;Weinnummer eingeben &gt; &quot; ;
      cin &gt;&gt; sammlung[aktAnz].wnr;
      cout &lt;&lt; &quot;Wein-Art(Rotwein, Weisswein) &gt; &quot;;
      cin &gt;&gt; sammlung[aktAnz].art;
	   cout &lt;&lt; &quot;Name (ohne Zwischenraeume) &gt; &quot;;
	   cin &gt;&gt; sammlung[aktAnz].name;
      cout &lt;&lt; &quot;Jahrgang (jjjj) &gt; &quot;;
	   cin &gt;&gt;  sammlung[aktAnz].jahrgang;
      cout &lt;&lt; &quot;Herkunftsland &gt; &quot;;
      cin &gt;&gt; sammlung[aktAnz].herkunftsland;
	   cout &lt;&lt; &quot;erstmalige Einlagerung(tt mm jj) &gt; &quot;;
	   cin &gt;&gt; sammlung[aktAnz].datum.tag &gt;&gt;sammlung[aktAnz].datum.monat
	   &gt;&gt; sammlung[aktAnz].datum.jahr;
	   cout &lt;&lt; &quot;Flaschenpreis (Euro) &gt; &quot;;
	   cin &gt;&gt; sammlung[aktAnz].preis;
      cout &lt;&lt; &quot;Vorhandene Stueckzahl eingeben &gt; &quot; ;
      cin &gt;&gt; sammlung[aktAnz].stueckzahl;
      aktAnz++;
      cout&lt;&lt;&quot;--------------------------------------------------\n&quot;;
      cout&lt;&lt;&quot;Wollen Sie weitermachen? Ja/Nein: &quot;;
      cin &gt;&gt; x;
	}while(x!='n');
   clrscr();
   return;
}

//Funktion Anzeigen aller erfassten Weine.
void weinAnzeigen(SWein sammlung[], int aktAnz)
{
	clrscr();
   cout&lt;&lt;&quot;===================================================\n\n&quot;;
   for(int i = 0; i &lt; aktAnz; i++)
   {
      cout &lt;&lt; &quot;---------------\n&quot;;
      cout &lt;&lt; &quot;Weine anzeigen&quot;&lt;&lt;endl;
      cout &lt;&lt; &quot;---------------\n&quot;;
   	cout &lt;&lt; &quot;SWeinnummer:\t\t\t&quot; &lt;&lt; sammlung[i].wnr &lt;&lt;&quot;\n&quot;;
      cout &lt;&lt; &quot;Art:\t\t\t\t&quot; &lt;&lt; sammlung[i].art &lt;&lt;&quot;\n&quot;;
      cout &lt;&lt; &quot;Name:\t\t\t\t&quot; &lt;&lt; sammlung[i].name &lt;&lt;&quot;\n&quot;;
      cout &lt;&lt; &quot;Jahrgang:\t\t\t&quot; &lt;&lt; sammlung[i].jahrgang &lt;&lt;&quot;\n&quot;;
      cout &lt;&lt; &quot;Herkunftsland:\t\t\t&quot; &lt;&lt; sammlung[i].herkunftsland &lt;&lt;&quot;\n&quot;;
      cout &lt;&lt; &quot;erstmalige Einlagerung:\t\t&quot; &lt;&lt; sammlung[i].datum.tag &lt;&lt; &quot;.&quot; &lt;&lt; sammlung[i].datum.monat
           &lt;&lt; &quot;.&quot; &lt;&lt; sammlung[i].datum.jahr &lt;&lt;&quot;\n&quot;;
	   cout &lt;&lt; &quot;Flaschenpreis:\t\t\t&quot; &lt;&lt; sammlung[i].preis &lt;&lt; &quot;\n&quot;;
      cout&lt;&lt;&quot;--------------------------------------------------\n&quot;;
      cout &lt;&lt; &quot;Vorhandene Stueckzahl:\t\t&quot; &lt;&lt; sammlung[i].stueckzahl&lt;&lt;&quot;\n\n&quot;;
      cout&lt;&lt;&quot;--------------------------------------------------\n\n&quot;;
	}
   cout&lt;&lt;&quot;Weiter...&quot;;
   getch();
   clrscr();
   return;
}

//Funktion zum suchen und zum Aendern.
//Funktion suchen anhand der vergebenen Weinnummern.
//Funktion Aender: Es kann der Lagerstand veraendert werden.Zu und Abbuchen möglich.
void weinAendern(SWein sammlung[], int aktAnz)
{
 clrscr();
 char y,z;
 int i;
   	cout&lt;&lt;&quot;===================================================\n\n&quot;;
      for(i = 0; i &lt; aktAnz; i++)
      {
       cout &lt;&lt; &quot;---------------------\n&quot;;
       cout &lt;&lt; &quot;Weine suchen/aendern&quot;&lt;&lt;endl;
       cout &lt;&lt; &quot;---------------------\n&quot;;
       cout&lt;&lt;&quot;SWeinnummer eingeben: &quot;;
       cin &gt;&gt; i;
        if(sammlung[i].wnr==i);
        {
         cout &lt;&lt; &quot;SWeinnummer:\t\t\t&quot; &lt;&lt; sammlung[i].wnr &lt;&lt;&quot;\n&quot;;
         cout &lt;&lt; &quot;Art:\t\t\t\t&quot; &lt;&lt; sammlung[i].art &lt;&lt;&quot;\n&quot;;
         cout &lt;&lt; &quot;Name:\t\t\t\t&quot; &lt;&lt; sammlung[i].name &lt;&lt;&quot;\n&quot;;
         cout &lt;&lt; &quot;Jahrgang:\t\t\t&quot; &lt;&lt; sammlung[i].jahrgang &lt;&lt;&quot;\n&quot;;
         cout &lt;&lt; &quot;Herkunftsland:\t\t\t&quot; &lt;&lt; sammlung[i].herkunftsland &lt;&lt;&quot;\n&quot;;
         cout &lt;&lt; &quot;erstmalige Einlagerung:\t\t&quot; &lt;&lt; sammlung[i].datum.tag &lt;&lt; &quot;.&quot; &lt;&lt; sammlung[i].datum.monat
              &lt;&lt; &quot;.&quot; &lt;&lt; sammlung[i].datum.jahr &lt;&lt;&quot;\n&quot;;
	      cout &lt;&lt; &quot;Flaschenpreis:\t\t\t&quot; &lt;&lt; sammlung[i].preis &lt;&lt; &quot;\n&quot;;
         cout&lt;&lt;&quot;--------------------------------------------------\n&quot;;
         cout &lt;&lt; &quot;Vorhandene Stueckzahl:\t\t&quot; &lt;&lt; sammlung[i].stueckzahl&lt;&lt;&quot;\n\n&quot;;
         cout&lt;&lt;&quot;--------------------------------------------------\n&quot;;
         cout &lt;&lt; &quot;Zurueck zum Menue? Ja/Nein: &quot;;
         cin &gt;&gt; y;
          if(y=='n')
           {
             cout&lt;&lt;&quot;--------------------------------------------------\n&quot;;
             cout &lt;&lt; &quot;Wollen Sie den Lagerstand veraendern? Ja/Nein: &quot;;
             cin &gt;&gt; z;
              if(z=='j')
               {
                cout&lt;&lt;&quot;--------------------------------------------------\n&quot;;
                cout &lt;&lt; &quot;Alter Lagerstand:\t\t&quot; &lt;&lt; sammlung[i].stueckzahl&lt;&lt;endl;
                cout &lt;&lt; &quot;Neuer Lagerstand eingeben:\t&quot;;
                cin &gt;&gt; sammlung[i].stueckzahl;
                cout &lt;&lt; &quot;Neuer Lagerstand:\t\t&quot; &lt;&lt; sammlung[i].stueckzahl&lt;&lt;endl;
                cout&lt;&lt;&quot;--------------------------------------------------\n&quot;;
               }
            }cout &lt;&lt; &quot;\nWeiter mit beliebiger Taste...&quot;&lt;&lt;endl;
            getch();
            return;
       }while(y != 'n')
      cout &lt;&lt; &quot;\nWeiter mit beliebiger Taste...&quot;;
      getch();
      clrscr();
      menu();
      }
}

//Hilfsfunktionen
//fileRead liest Datei ein und alloziert dynamisch Speicher fuer alle Elemente und liest Sie ein
int fileRead(char* strfile, const SWein* meineweine, int &amp;anz){

	//Inputfilestream - Objekt, quasi Pointer auf die Dateien
	ifstream dat_ein;
  	//Eingabedatei oeffnen
  	dat_ein.open( strfile, ios::in||ios::binary);
   //Check ob's funktioniert hat
  	if (!dat_ein){
   	cerr &lt;&lt; &quot;Datei konnte nicht geoeffnet werden!\n&quot;;
    	return 1;
   }
   //1. Anzahl Elemente in Datei zaehlen
   anz = dat_ein.gcount() / sizeof(struct SWein);
   dat_ein.read( reinterpret_cast&lt;char*&gt;(&amp;anz),sizeof(int));

  	//Strukturen einlesen
   for(int i = 0; i &lt; anz; i++){
   	 dat_ein.read((char *) &amp;meineweine[i],sizeof(struct SWein));
   }
 	//File unbedingt schliessen nach Gebrauch
  	dat_ein.close();
	return 0;
}

//fileSave speichert Daten eines Arrays in eine Datei, welche per Parameter uebergeben werden
int fileSave(char* strfile, SWein* meineweine, int anz){
	//Outputfilestream - Objekt, quasi Pointer auf die Dateien
	ofstream dat_aus;

  	// Ausgabedatei oeffnen
  	dat_aus.open(strfile, ios::out||ios::binary);

   //Check ob's funktioniert hat
  	if (!dat_aus){
    	cerr &lt;&lt; &quot;Datei konnte nicht geoeffnet werden!\n&quot;;
    	return 1;
   }
   dat_aus.write(reinterpret_cast&lt;char*&gt;(&amp;anz),sizeof(int));
  	// Array mit Strukturen binaer in Datei schreiben
   dat_aus.write((char *)meineweine, sizeof(struct SWein)*MAXWEINE);
	//File unbedingt schliessen nach Gebrauch
  	dat_aus.close();
	return 0;
}

//Erkennen der Funktionstaste
int fkt_taste()        /* Erkennung der Funktionstasten F1...F10 */
{
	int Nummer=20;                                        /* Nummer der Taste */
	char ch=0;                                         /* Charakter der Taste */
   do{
   	do {} while (!kbhit());                       /* Auf Tastendruck warten */
		ch = getch();
		if ((ch==0) &amp;&amp; (kbhit)){
      	ch = getch();
			Nummer = ch-58;	                /* ch = #0   =&gt; Fkt-Taste allgemein */
		}		                              /* Nummer der Funtionstaste ermitteln */
	}while ((Nummer&lt;1) || (Nummer&gt;10));   /* solange bis Fkt-Taste F01 bis F10 */
	return Nummer;
}
</code></pre>
<p>Gruss tinile</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/132279/dickes-problem</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 09:11:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/132279.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 09 Jan 2006 15:35:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dickes Problem on Mon, 09 Jan 2006 15:35:42 GMT]]></title><description><![CDATA[<p>Hallo Leute</p>
<p>Ih habe ein dickes Problem.<br />
Mein Programm läuft bis auf die Suchefunktion relativ gut.<br />
Er findet den richtigen Wein nicht.Wenn ich den Wein 2 suche zeigt er mir den 3 Wein.<br />
Könnt ihr mir bitte helfen? Hab schon den ganzen Tag probiert.</p>
<pre><code>#include &lt;iostream.h&gt;
#include &lt;iomanip.h&gt;
#include &lt;fstream.h&gt;
#include &lt;string.h&gt;
#include &lt;conio.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;dos.h&gt;

//Definition der Funktionstasten
#define F1 1
#define F2 2
#define F3 3
#define F4 4
#define F10 10

#define EINZUGMENU 15
#define EINZUGTEXT 15

//Globale Datendefinitionen
const short MAXCHAR = 80;
const int MAXWEINE = 40;

// Struktur für Datum format
struct datum
{
	int tag;
	int monat;
	int jahr;
};

// Struktur für Informationen der SWeine
struct SWein
{
	char art[MAXCHAR];                //Zeichenkette für Wein art
   int wnr;                          //					  Wein NR.
   char name[MAXCHAR];               //					  Wein Namen
   char jahrgang[MAXCHAR];           //					  Wein Jahrgang
   char herkunftsland[MAXCHAR];      //					  Wein Herkunftsland
   char einlagerungsdatum;           //					  Wein Einlagerungsdatum
  	datum datum;
   int stueckzahl;                   //                 Wein Stueckzahl
   double preis;                     //					  Wein Preis
};

//Funktionsdeklarationen
int menu();
void weinErfassen(SWein sammlung[], int &amp;aktAnz);
void weinAnzeigen(SWein sammlung[], int aktAnz);
void weinAendern(SWein sammlung[], int aktAnz);

//Hilfsfunktionen
int fileRead(char* strfile,  const SWein* meineweine, int &amp;anz);
int fileSave(char* strfile, SWein* meineweine, int anz);
int fkt_taste();

// Hauptprogramm
int main()

{  //Statischer Speicher fuer MAXWEINE
   struct SWein keller[MAXWEINE];
   int aktAnz = 0, auswahl;

   //Daten aus Datei einlesen
   fileRead(&quot;weinkatalog.dat&quot;,keller,aktAnz);
   do{
   	auswahl = menu();
      switch(auswahl){
      	case F10:	//Anwendung beenden
         	clrscr();
            fileSave(&quot;weinkatalog.dat&quot;,keller, aktAnz); //Daten werden bei Programmende gespeichert bzw.
            cout &lt;&lt; &quot;Zum Wohl...&quot;;                     //Aktualisiert
            sleep(1);
            break;
			case F1:	//Daten Weine erfassen
         	cout &lt;&lt; endl &lt;&lt; aktAnz;
            getch();
         	weinErfassen(keller,aktAnz);
         	break;
         case F2:	//Daten aller Weine anzeigen
         	clrscr();
         	weinAnzeigen(keller, aktAnz);
         	break;
         case F3:	//Weine suchen und den Lagerstand aendern.
         	clrscr();
         	weinAendern(keller,aktAnz);
         	break;
         case F4: //Eingegebene Daten Sichern/Aktualisieren
         	clrscr();
         	fileSave(&quot;weinkatalog.dat&quot;,keller, aktAnz);
            cout &lt;&lt; &quot;Daten gesichert&quot;&lt;&lt;endl;
            getch();
            break;
         default:	//Alle anderen Faelle
         	break;
   	}
   }while(auswahl != F10);
   return(0);
}

//Funktionsdefinitionen
//Hauptfunktionen
//Menufunktione gibt Menue aus und liest Auswahl des Benutzers ein und gibt diese
//als int zuerueck
int menu(){
	//Lokale Daten
   char auswahl;
   do{
		clrscr();
      cout.setf(ios::right,ios::adjustfield);
      cout &lt;&lt; setw(EINZUGMENU) &lt;&lt; &quot;&quot; &lt;&lt; &quot;Menue Weinverwaltung\n\n\n&quot;;
      cout &lt;&lt; setw(EINZUGMENU) &lt;&lt; &quot;F 1&quot; &lt;&lt; &quot;\tWeine erfassen&quot; &lt;&lt; endl &lt;&lt; endl;
      cout &lt;&lt; setw(EINZUGMENU) &lt;&lt; &quot;F 2&quot; &lt;&lt; &quot;\tWeine anzeigen&quot; &lt;&lt; endl &lt;&lt; endl;
      cout &lt;&lt; setw(EINZUGMENU) &lt;&lt; &quot;F 3&quot; &lt;&lt; &quot;\tWeine aendern&quot; &lt;&lt; endl &lt;&lt; endl;
      cout &lt;&lt; setw(EINZUGMENU) &lt;&lt; &quot;F 4&quot; &lt;&lt; &quot;\tEingegebene Daten Sichern&quot; &lt;&lt; endl &lt;&lt; endl;
      cout &lt;&lt; setw(EINZUGMENU) &lt;&lt; &quot;F10&quot; &lt;&lt; &quot;\tBeenden&quot; &lt;&lt; endl &lt;&lt; endl;
      //Bedienung ueber Funktionstasten F1 - F10, fuer F1 bekommt man 1 zuerueck usw.
      auswahl = fkt_taste();
   }while(auswahl &lt; F1 || auswahl &gt; F10);
 	return auswahl;
}

//Funktionsdefinitionen (Implementierungen)
//Funktion zum Weine erfassen.
void weinErfassen(SWein sammlung[], int &amp;aktAnz)
{
 char x;
 clrscr();

   do
   {
   	cout &lt;&lt; &quot;---------------------\n&quot;;
      cout &lt;&lt; &quot;Neuer Wein erfassen &quot;&lt;&lt;endl;
      cout &lt;&lt; &quot;---------------------\n&quot;;
      cout &lt;&lt; &quot;Weinnummer eingeben &gt; &quot; ;
      cin &gt;&gt; sammlung[aktAnz].wnr;
      cout &lt;&lt; &quot;Wein-Art(Rotwein, Weisswein) &gt; &quot;;
      cin &gt;&gt; sammlung[aktAnz].art;
	   cout &lt;&lt; &quot;Name (ohne Zwischenraeume) &gt; &quot;;
	   cin &gt;&gt; sammlung[aktAnz].name;
      cout &lt;&lt; &quot;Jahrgang (jjjj) &gt; &quot;;
	   cin &gt;&gt;  sammlung[aktAnz].jahrgang;
      cout &lt;&lt; &quot;Herkunftsland &gt; &quot;;
      cin &gt;&gt; sammlung[aktAnz].herkunftsland;
	   cout &lt;&lt; &quot;erstmalige Einlagerung(tt mm jj) &gt; &quot;;
	   cin &gt;&gt; sammlung[aktAnz].datum.tag &gt;&gt;sammlung[aktAnz].datum.monat
	   &gt;&gt; sammlung[aktAnz].datum.jahr;
	   cout &lt;&lt; &quot;Flaschenpreis (Euro) &gt; &quot;;
	   cin &gt;&gt; sammlung[aktAnz].preis;
      cout &lt;&lt; &quot;Vorhandene Stueckzahl eingeben &gt; &quot; ;
      cin &gt;&gt; sammlung[aktAnz].stueckzahl;
      aktAnz++;
      cout&lt;&lt;&quot;--------------------------------------------------\n&quot;;
      cout&lt;&lt;&quot;Wollen Sie weitermachen? Ja/Nein: &quot;;
      cin &gt;&gt; x;
	}while(x!='n');
   clrscr();
   return;
}

//Funktion Anzeigen aller erfassten Weine.
void weinAnzeigen(SWein sammlung[], int aktAnz)
{
	clrscr();
   cout&lt;&lt;&quot;===================================================\n\n&quot;;
   for(int i = 0; i &lt; aktAnz; i++)
   {
      cout &lt;&lt; &quot;---------------\n&quot;;
      cout &lt;&lt; &quot;Weine anzeigen&quot;&lt;&lt;endl;
      cout &lt;&lt; &quot;---------------\n&quot;;
   	cout &lt;&lt; &quot;SWeinnummer:\t\t\t&quot; &lt;&lt; sammlung[i].wnr &lt;&lt;&quot;\n&quot;;
      cout &lt;&lt; &quot;Art:\t\t\t\t&quot; &lt;&lt; sammlung[i].art &lt;&lt;&quot;\n&quot;;
      cout &lt;&lt; &quot;Name:\t\t\t\t&quot; &lt;&lt; sammlung[i].name &lt;&lt;&quot;\n&quot;;
      cout &lt;&lt; &quot;Jahrgang:\t\t\t&quot; &lt;&lt; sammlung[i].jahrgang &lt;&lt;&quot;\n&quot;;
      cout &lt;&lt; &quot;Herkunftsland:\t\t\t&quot; &lt;&lt; sammlung[i].herkunftsland &lt;&lt;&quot;\n&quot;;
      cout &lt;&lt; &quot;erstmalige Einlagerung:\t\t&quot; &lt;&lt; sammlung[i].datum.tag &lt;&lt; &quot;.&quot; &lt;&lt; sammlung[i].datum.monat
           &lt;&lt; &quot;.&quot; &lt;&lt; sammlung[i].datum.jahr &lt;&lt;&quot;\n&quot;;
	   cout &lt;&lt; &quot;Flaschenpreis:\t\t\t&quot; &lt;&lt; sammlung[i].preis &lt;&lt; &quot;\n&quot;;
      cout&lt;&lt;&quot;--------------------------------------------------\n&quot;;
      cout &lt;&lt; &quot;Vorhandene Stueckzahl:\t\t&quot; &lt;&lt; sammlung[i].stueckzahl&lt;&lt;&quot;\n\n&quot;;
      cout&lt;&lt;&quot;--------------------------------------------------\n\n&quot;;
	}
   cout&lt;&lt;&quot;Weiter...&quot;;
   getch();
   clrscr();
   return;
}

//Funktion zum suchen und zum Aendern.
//Funktion suchen anhand der vergebenen Weinnummern.
//Funktion Aender: Es kann der Lagerstand veraendert werden.Zu und Abbuchen möglich.
void weinAendern(SWein sammlung[], int aktAnz)
{
 clrscr();
 char y,z;
 int i;
   	cout&lt;&lt;&quot;===================================================\n\n&quot;;
      for(i = 0; i &lt; aktAnz; i++)
      {
       cout &lt;&lt; &quot;---------------------\n&quot;;
       cout &lt;&lt; &quot;Weine suchen/aendern&quot;&lt;&lt;endl;
       cout &lt;&lt; &quot;---------------------\n&quot;;
       cout&lt;&lt;&quot;SWeinnummer eingeben: &quot;;
       cin &gt;&gt; i;
        if(sammlung[i].wnr==i);
        {
         cout &lt;&lt; &quot;SWeinnummer:\t\t\t&quot; &lt;&lt; sammlung[i].wnr &lt;&lt;&quot;\n&quot;;
         cout &lt;&lt; &quot;Art:\t\t\t\t&quot; &lt;&lt; sammlung[i].art &lt;&lt;&quot;\n&quot;;
         cout &lt;&lt; &quot;Name:\t\t\t\t&quot; &lt;&lt; sammlung[i].name &lt;&lt;&quot;\n&quot;;
         cout &lt;&lt; &quot;Jahrgang:\t\t\t&quot; &lt;&lt; sammlung[i].jahrgang &lt;&lt;&quot;\n&quot;;
         cout &lt;&lt; &quot;Herkunftsland:\t\t\t&quot; &lt;&lt; sammlung[i].herkunftsland &lt;&lt;&quot;\n&quot;;
         cout &lt;&lt; &quot;erstmalige Einlagerung:\t\t&quot; &lt;&lt; sammlung[i].datum.tag &lt;&lt; &quot;.&quot; &lt;&lt; sammlung[i].datum.monat
              &lt;&lt; &quot;.&quot; &lt;&lt; sammlung[i].datum.jahr &lt;&lt;&quot;\n&quot;;
	      cout &lt;&lt; &quot;Flaschenpreis:\t\t\t&quot; &lt;&lt; sammlung[i].preis &lt;&lt; &quot;\n&quot;;
         cout&lt;&lt;&quot;--------------------------------------------------\n&quot;;
         cout &lt;&lt; &quot;Vorhandene Stueckzahl:\t\t&quot; &lt;&lt; sammlung[i].stueckzahl&lt;&lt;&quot;\n\n&quot;;
         cout&lt;&lt;&quot;--------------------------------------------------\n&quot;;
         cout &lt;&lt; &quot;Zurueck zum Menue? Ja/Nein: &quot;;
         cin &gt;&gt; y;
          if(y=='n')
           {
             cout&lt;&lt;&quot;--------------------------------------------------\n&quot;;
             cout &lt;&lt; &quot;Wollen Sie den Lagerstand veraendern? Ja/Nein: &quot;;
             cin &gt;&gt; z;
              if(z=='j')
               {
                cout&lt;&lt;&quot;--------------------------------------------------\n&quot;;
                cout &lt;&lt; &quot;Alter Lagerstand:\t\t&quot; &lt;&lt; sammlung[i].stueckzahl&lt;&lt;endl;
                cout &lt;&lt; &quot;Neuer Lagerstand eingeben:\t&quot;;
                cin &gt;&gt; sammlung[i].stueckzahl;
                cout &lt;&lt; &quot;Neuer Lagerstand:\t\t&quot; &lt;&lt; sammlung[i].stueckzahl&lt;&lt;endl;
                cout&lt;&lt;&quot;--------------------------------------------------\n&quot;;
               }
            }cout &lt;&lt; &quot;\nWeiter mit beliebiger Taste...&quot;&lt;&lt;endl;
            getch();
            return;
       }while(y != 'n')
      cout &lt;&lt; &quot;\nWeiter mit beliebiger Taste...&quot;;
      getch();
      clrscr();
      menu();
      }
}

//Hilfsfunktionen
//fileRead liest Datei ein und alloziert dynamisch Speicher fuer alle Elemente und liest Sie ein
int fileRead(char* strfile, const SWein* meineweine, int &amp;anz){

	//Inputfilestream - Objekt, quasi Pointer auf die Dateien
	ifstream dat_ein;
  	//Eingabedatei oeffnen
  	dat_ein.open( strfile, ios::in||ios::binary);
   //Check ob's funktioniert hat
  	if (!dat_ein){
   	cerr &lt;&lt; &quot;Datei konnte nicht geoeffnet werden!\n&quot;;
    	return 1;
   }
   //1. Anzahl Elemente in Datei zaehlen
   anz = dat_ein.gcount() / sizeof(struct SWein);
   dat_ein.read( reinterpret_cast&lt;char*&gt;(&amp;anz),sizeof(int));

  	//Strukturen einlesen
   for(int i = 0; i &lt; anz; i++){
   	 dat_ein.read((char *) &amp;meineweine[i],sizeof(struct SWein));
   }
 	//File unbedingt schliessen nach Gebrauch
  	dat_ein.close();
	return 0;
}

//fileSave speichert Daten eines Arrays in eine Datei, welche per Parameter uebergeben werden
int fileSave(char* strfile, SWein* meineweine, int anz){
	//Outputfilestream - Objekt, quasi Pointer auf die Dateien
	ofstream dat_aus;

  	// Ausgabedatei oeffnen
  	dat_aus.open(strfile, ios::out||ios::binary);

   //Check ob's funktioniert hat
  	if (!dat_aus){
    	cerr &lt;&lt; &quot;Datei konnte nicht geoeffnet werden!\n&quot;;
    	return 1;
   }
   dat_aus.write(reinterpret_cast&lt;char*&gt;(&amp;anz),sizeof(int));
  	// Array mit Strukturen binaer in Datei schreiben
   dat_aus.write((char *)meineweine, sizeof(struct SWein)*MAXWEINE);
	//File unbedingt schliessen nach Gebrauch
  	dat_aus.close();
	return 0;
}

//Erkennen der Funktionstaste
int fkt_taste()        /* Erkennung der Funktionstasten F1...F10 */
{
	int Nummer=20;                                        /* Nummer der Taste */
	char ch=0;                                         /* Charakter der Taste */
   do{
   	do {} while (!kbhit());                       /* Auf Tastendruck warten */
		ch = getch();
		if ((ch==0) &amp;&amp; (kbhit)){
      	ch = getch();
			Nummer = ch-58;	                /* ch = #0   =&gt; Fkt-Taste allgemein */
		}		                              /* Nummer der Funtionstaste ermitteln */
	}while ((Nummer&lt;1) || (Nummer&gt;10));   /* solange bis Fkt-Taste F01 bis F10 */
	return Nummer;
}
</code></pre>
<p>Gruss tinile</p>
]]></description><link>https://www.c-plusplus.net/forum/post/961892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/961892</guid><dc:creator><![CDATA[tinile]]></dc:creator><pubDate>Mon, 09 Jan 2006 15:35:42 GMT</pubDate></item><item><title><![CDATA[Reply to Dickes Problem on Mon, 09 Jan 2006 15:45:10 GMT]]></title><description><![CDATA[<p>*mein Gott, diese Einrückung*</p>
<p>tinile schrieb:</p>
<blockquote>
<pre><code class="language-cpp">for(i = 0; i &lt; aktAnz; i++)
{
  //...
  cin &gt;&gt; i;
  if(sammlung[i].wnr==i);
  {
    //...
  }
}
</code></pre>
</blockquote>
<p>* Du verwendest die Variable i parallel als Zähler und für die Eingabe - das kann nicht gutgehen<br />
* hinter dem if() ist ein Semikolon zu viel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/961912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/961912</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 09 Jan 2006 15:45:10 GMT</pubDate></item><item><title><![CDATA[Reply to Dickes Problem on Mon, 09 Jan 2006 15:53:20 GMT]]></title><description><![CDATA[<p>tinile schrieb:</p>
<blockquote>
<p>Mein Programm läuft bis auf die Suchefunktion relativ gut.<br />
Er findet den richtigen Wein nicht.Wenn ich den Wein 2 suche zeigt er mir den 3 Wein.</p>
</blockquote>
<p>Die Fehlerbeschreibung ist ziemlich dürftig.</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
</code></pre>
<p>Das muss eigentlich &lt;iostream&gt; sein, aber du benutzt einen uralten DOS-Compiler, richtig?</p>
<pre><code class="language-cpp">void weinAendern(SWein sammlung[], int aktAnz)
{
      for(i = 0; i &lt; aktAnz; i++) {
       cout&lt;&lt;&quot;SWeinnummer eingeben: &quot;;
       cin &gt;&gt; i;
        if(sammlung[i].wnr==i);
        {
</code></pre>
<p>Ich versteh die Logik nicht. Du gehst alle Weine durch, und lässt dir jedesmal vom Nutzer eine Nummer eingeben. Und wenn die Nummer gerade mit der des aktuellen Weines übereinstimmt, gibst du die Daten dazu aus?<br />
Zieh doch die Abfrage raus aus der Schleife.</p>
<pre><code class="language-cpp">int fileRead(char* strfile, const SWein* meineweine, int &amp;anz){
  	dat_ein.open( strfile, ios::in||ios::binary);
</code></pre>
<p>Das ist der falsche Operator. Nimm das bitweise Oder | und nicht das logische Oder ||. Bei fileSave auch.</p>
<pre><code class="language-cpp">anz = dat_ein.gcount() / sizeof(struct SWein);
   dat_ein.read( reinterpret_cast&lt;char*&gt;(&amp;anz),sizeof(int));
</code></pre>
<p>Welchen Sinn hat das oben mit dem gcount? Es bestimmt jedenfalls nicht die Länge der Datei, aber das ist auch egal, weil anz ja im folgenden read sowieso überschrieben wird.</p>
<pre><code class="language-cpp">dat_ein.read((char *) &amp;meineweine[i],sizeof(struct SWein));
</code></pre>
<p>Ich würd hier auch reinterpret_cast nehmen, wie oben.</p>
<pre><code class="language-cpp">//File unbedingt schliessen nach Gebrauch
  	dat_ein.close();
</code></pre>
<p>ein leicht irreführender Kommentar ... es stimmt natürlich, dass Dateien geschlossen werden sollten, aber ifstream tut das bereits im Destruktor. Die close-Funktion muss man also normalerweise nicht aufrufen. Was mich gleich auf was anderes bringt: Für die open-Funktion gilt das gleiche. Es ist im Normalfall besser, das Öffnen gleich vom Konstruktor erledigen zu lassen:</p>
<pre><code class="language-cpp">ifstream dat_ein(strfile, ios::in | ios::binary);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/961921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/961921</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 09 Jan 2006 15:53:20 GMT</pubDate></item><item><title><![CDATA[Reply to Dickes Problem on Mon, 09 Jan 2006 17:00:57 GMT]]></title><description><![CDATA[<p>Hallo Leute</p>
<p>Tut mir leid bin ein C++ Anfänger.</p>
<pre><code class="language-cpp">*mein Gott, diese Einrückung*
</code></pre>
<p>Ich hoffe ihr werdet nich blind von diesem Programm.</p>
<pre><code class="language-cpp">anz = dat_ein.gcount() / sizeof(struct SWein)
</code></pre>
<p>ist noch ein uebrigbleibsel, schon entfernt.</p>
<p>Habe einen alten Borland compiler(ungef.10 Jahre).</p>
<pre><code class="language-cpp">* hinter dem if() ist ein Semikolon zu viel
</code></pre>
<p>Ist mir bewusst.Aber ohne gehts noch weniger.</p>
<p>Hat jemand vielleicht ein Beispiel oder ein Tip(ohne das ganze Programm zu loeschen).?</p>
<p>Wenn ich die Funktion aendern aurufe und einen Wein suchen will zeigt er mir immer den nächst folgenden (Nummer) Wein an.</p>
<p>Gruss tinile</p>
]]></description><link>https://www.c-plusplus.net/forum/post/961990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/961990</guid><dc:creator><![CDATA[tinile]]></dc:creator><pubDate>Mon, 09 Jan 2006 17:00:57 GMT</pubDate></item><item><title><![CDATA[Reply to Dickes Problem on Mon, 09 Jan 2006 17:46:13 GMT]]></title><description><![CDATA[<p>Versuch's mal damit, i in zwei verschiedene Variablen aufzuspalten. Du überschreibst bei deiner Eingabe jedes Mal den aktuellen Schleifenindex:</p>
<pre><code class="language-cpp">int nr;
cout&lt;&lt;&quot;Bitte Nummer angeben:&quot;;
cin&gt;&gt;nr;
for(int i=0;i&lt;akt_Anz;++i)
  if(sammlung[i].wnr==nr)
  {
    // Wein gefunden -&gt; weiterarbeiten
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/962016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/962016</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 09 Jan 2006 17:46:13 GMT</pubDate></item><item><title><![CDATA[Reply to Dickes Problem on Mon, 09 Jan 2006 18:20:47 GMT]]></title><description><![CDATA[<p>Hallo CStoll</p>
<p>Ein grosser Dank an Dich.Funktioniert wunderbar.<br />
Es hängt oft nur an kleinen Fehlern.Naja<br />
Bin halt auch nicht mehr der Juengste(ueber 35).Und mit der logik wars sowieso nie weit her.<br />
Das mit der Loeschfunktion lass ich glaub mal lieber.</p>
<p>Gruss aus Oesterreich und nochmals Dank an alle.</p>
<p>tinile<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/962039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/962039</guid><dc:creator><![CDATA[tinile]]></dc:creator><pubDate>Mon, 09 Jan 2006 18:20:47 GMT</pubDate></item></channel></rss>