Struct innerhalb einer Funktionen

Bismark

Erfahrenes Mitglied
Ich habe eine frage:

Bei der Ausgabe muss man die Startnummer (sta_nr) eingeben, damit das Programm die entsprechenden Spielerdaten ausgeben kann bzw. soll.

Man kann zwar die Zahl eingeben, aber es kommen nicht die Daten heraus, sondern es springt ins Menü zurück. Die Eingabe geschieht in der Funktion "void ausgabe" der Prototyp, Aufruf und die Definition sind markiert.

Code:
#include <conio.h>
#include <iostream>
#include <string>
#include <iomanip>
#include "conioex.h"

using namespace std;



const int pers = 3;

struct mensch						// Definition Struckt
{
	string nachname;
	string vorname;
	char gesch;
	int sta_nr;
	float schwi_nr;
	float rad_nr;
	float lauf_nr;
	float gesamt_nr;
};

mensch liste [pers];


void eingabe(mensch liste[pers]);		
void ausgabe(mensch liste[pers]);       //Fkt. Ausgabe Prototyp



int main()												   // #### Hauptprogramm #### 
{	
	char meüwahl;

	do
	{
	system("cls");
      
			
			cout<<"<1> Eingabe der Personendaten"<<endl;
			
			cout<<"<2> Ausgabe des Datensatzes"<<endl;
			
			
			cout<<"ihre Wahl ==> ";
			cin>>meüwahl;

			switch (meüwahl)
			{
			 case '1': eingabe(liste);break;
			 case '2': ausgabe(liste);break;      //auruf Funktion Ausgabe
			
		  }
		}
	 while (meüwahl != '#' && meüwahl < 1 && meüwahl > 5);
	

 system("PAUSE");
 return 0;
}



void eingabe(mensch liste[pers])		//Fkt. Definition 
{
	int x = 0;
	char antwort;
	do
	{

			cout<<"Geben Sie den Nachname ein: ";
			cin>>liste[x].nachname;

			cout<<"Geben Sie den Vorname ein: ";
			cin>>liste[x].vorname;

			cout<<"Geben Sie den Geschlecht ein (m/w: ";
			cin>>liste[x].gesch;
			
			cout<<"Geben Sie die Startnr. ein: ";
			cin>>liste[x].sta_nr;

			liste[x].schwi_nr = 0;

			liste[x].rad_nr = 0;
			
			liste[x].lauf_nr = 0;

			liste[x].gesamt_nr = 0;
		  

			cout<<endl<<endl;
		  system("cls");
	
		x++;

	}
 while (x == pers);


}											// #### Ende Fkt. eingabe



void ausgabe(mensch liste[pers])		//Definition Funktion Ausgabe
{
	int y = 0;
	int startnr_prüf;
	
	cout<<"Geben Sie die Startnummer ein";
    cin>>startnr_prüf;
	
	do
	{	
		if (startnr_prüf == liste[y].sta_nr)
		{
			cout<<liste[y].nachname;

			cout<<liste[y].vorname;

			cout<<liste[y].gesch;

			cout<<liste[y].sta_nr;

			cout<<liste[y].schwi_nr;

			cout<<liste[y].rad_nr;

			cout<<liste[y].lauf_nr;

			cout<<liste[y].gesamt_nr;
		}
				
		
		y++;
	} 
	while (y < pers);
}


Ich bitte um Hilfe
 
Okay.. dein Fehler ist es, Daten abzufragen, die nicht vorhanden sind! (und ich würds ein wenig anders machen, aber das is so okay.. hier mein text:)

Code:
#include <conio.h>
#include <iostream>
#include <string>
#include <iomanip>


using namespace std;



const int pers = 3;

struct mensch						// Definition Struckt
{
	string nachname;
	string vorname;
	char gesch;
	int sta_nr;
	float schwi_nr;
	float rad_nr;
	float lauf_nr;
	float gesamt_nr;
};

mensch liste [pers];


void eingabe(mensch liste[pers]);		
void ausgabe(mensch liste[pers]);       //Fkt. Ausgabe Prototyp



int main()												   // #### Hauptprogramm #### 
{	
	liste[0].nachname="Blomquist";
                liste[0].vorname="Kalle";
//USW
//Hier definierst du erst, was dort drinn steht
//Ansonsten coutet er unten schlichtweg garnichts, weil in den Arrays nichts steht!
//Alternativ kannst du auch Sachen in Dateien auslagern(s.u.)

	char mewahl;

	do
	{
	system("cls");
      
			
			cout<<"<1> Eingabe der Personendaten"<<endl;
			
			cout<<"<2> Ausgabe des Datensatzes"<<endl;
			
			
			cout<<"ihre Wahl ==> ";
			cin>>mewahl;

			switch (mewahl)
			{
			 case '1': eingabe(liste);break;
			 case '2': ausgabe(liste);break;  
			
		  }
		}
	 while (mewahl != '#' && mewahl < 1 && mewahl > 5);
	

 system("PAUSE");
 return 0;
}



void eingabe(mensch liste[pers])		//Fkt. Definition 
{
	int x = 0;
	char antwort;
	do
	{

			cout<<"Geben Sie den Nachname ein: ";
			cin>>liste[x].nachname;

			cout<<"Geben Sie den Vorname ein: ";
			cin>>liste[x].vorname;

			cout<<"Geben Sie den Geschlecht ein (m/w: ";
			cin>>liste[x].gesch;
			
			cout<<"Geben Sie die Startnr. ein: ";
			cin>>liste[x].sta_nr;

			liste[x].schwi_nr = 0;

			liste[x].rad_nr = 0;
			
			liste[x].lauf_nr = 0;

			liste[x].gesamt_nr = 0;
		  

			cout<<endl<<endl;
		  system("cls");
	
		x++;

	}
 while (x == pers);


};											// #### Ende Fkt. eingabe



void ausgabe(mensch liste[pers])		//Definition Funktion Ausgabe
{
	
	int startnr_prf;
	
	cout<<"Geben Sie die Startnummer ein";
    cin>>startnr_prf;
	
	for(short y=0;y<perso;y++){
		if (startnr_prf == liste[y].sta_nr)
		{
			cout<<liste[y].nachname;

			cout<<liste[y].vorname;

			cout<<liste[y].gesch;

			cout<<liste[y].sta_nr;

			cout<<liste[y].schwi_nr;

			cout<<liste[y].rad_nr;

			cout<<liste[y].lauf_nr;

			cout<<liste[y].gesamt_nr;
		}
				
		
	
	} 
};
Und Bitte keine Umlaute "äüö" verwenden!!
 
so nun zu dem Dateischreiben:

Code:
#include <iostream>
#include <fstream>

using namespace std;

int main(){

//Funktion Neue Person anlegen...:

...
ofstream schreibe("C:\perso.txt",ios::trunc); //Der Flag ios::trunc löscht alles in der Datei
                                                                //bzw erstellt eine neue Datei
schreibe << "bla"<<endl;
//jetzt steht in der ersten Zeile in der .txt "bla".

//Funktion Personen auslesen..:

...
ifstream lese("C:\perso.txt);
string array[100];
param=10;//Anzahl deiner Parameter/Zeilen in der .txt
for(short i=0;i<param;i++){
getline(lese,array[i],'\n);
}

return 0;
}
Ich hoffe ich konnte helfen... sonst frag nach ;)
lg
eXo
 
Kurze frage:

geht es nicht, wenn ich die Namen nicht vorher im Quelltext, sondern erst beim ausführen des Programms eingebe?:confused:
 
wieso? wenn ich deine Frage richtig verstehe... die Strukturen liegen doch in der main, natürlich könntest du auch alles in die headerdatei z.B. schreiben oder in eine ausgesodnerte .txt (wie ich ja vorgeschlagen habe), statt .txt kann man auch .dll nehmen, sieht professioneller aus ;)
 
Zurück