struct_telefonbuch
-
Hallo,kann mir jemand helfen ?
Die FGunktion Initialisierung() soll bei jedem Eintrag dem Namen
einen leerenString zuweisen.Wie krigt mann das?#include <iostream.h>
#include <string.h>#define MAX 100
struct Adresse
{
char name[50];
char vorname[50];
char tel[50];
};Adresse person[MAX];
int i;
int menue();
void eingabe();
void suchen();
void loeschen();
void initializirung();
int nummereingabe(int i);void main()
{
eingabe();
int m;
do
{
m=menue();
switch(m)
{
case 1:eingabe();break;
case 2:suchen();break;
case 3:loeschen();break;}
if(m==4)break;
cout<<"Weiter mit Eingabetaster\n";
getchar();
}
while(m);
cin.get();
}int menue()
{
int m=0;
while(m<1||m>4)
{
cout<<"\n\tM E N U E\n";
cout<<"1 engabe"<< endl;
cout<<"2 suchen"<<endl;
cout<<"3 loeschen"<<endl;
cout<<"4 beenden"<<endl;
cin>>m;
}
return m;
}void eingabe( )
{
char n[50];
char v[50];
char t[50];
i=nummereingabe(i);
cout<<i<<" Name :" ;
cin>>n;
strcpy(person[i-1].name,n);
cout << " vorname: ";
cin >> v;
strcpy(person[i-1].vorname,v);
cout<<"Telefon : ";
cin>>t;
strcpy(person[i-1].tel,t);}
void loeschen()
{
char leer[5]="";
i=nummereingabe(i);
if(strcmp(person[i-1].name,leer)==0)
{
cout<<"Eintrag ist leer !\n";
}
else{
cout<<"Eintrag : "<<person[i-1].name<<" "<<person[i-1].vorname<<endl;
cout<<"Telefonnummer : "<<person[i-1].tel<<" Wird geloescht !\n\n";
strcpy(person[i-1].name,leer);
}}
void suchen()
{
char leer[5]="";
i=nummereingabe(i);
if ( strcmp(person[i-1].name,leer)==0)
{ cout<<"Eintrag ist leer !\n";
}
else{
cout<<"\n"<<person[i-1].name<<" "<<person[i-1].vorname<<endl;
cout<<"Telefonnummer : "<<person[i-1].tel<<"\n\n";
}}
void initializirung()
{}
int nummereingabe(int i)
{
int eintrag;
cout<<"Eintragnummer : ";
cin>>eintrag;if ((eintrag>0) && (eintrag<=MAX))
{
return eintrag;
}
else {
cout<<"Eintragnummer nicht korekt (1-100) !\n";
return 1;
}}
-
Wenn du einen leeren String erzeugen willst, solltest du entweder strcpy(mystring,""); nutzen oder den String mit mystring[0] = '\0'; terminieren.
Wenn du ein char-Array hast, darfst du diesem kein Stringliteral zuweisen (mystring="hallo";), denn damit verlierst du die Adresse deines Stringspeichers und setzt es auf die Adresse eines konstanten Speicherbereiches in deiner ausführbaren Datei. Das kann dann zu fehlerhaftem Verhalten führen.Edit: Wenn du das ganze struct initialisieren willst, könntest du das auch mit memset(&var,0,sizeof(Adresse)); tun.
-
Auch wenn das nicht direkt eine Antwort auf deine Frage ist, aber prinzipiell mal wieder, wenn man schon C**++** programmiert, dann kann man auch std::string benutzen, das macht eine NULL initialisierung auch nicht so fehleranfällig
-
wie kann mann nur so bloede antwort geben !!!
-
Wieso blöd? std::string zu benutzen, ist nahezu immer sinnvoller.
-
ausserdem würde ich die code tags benutzen ([ cpp ]) und einrücken
std::string benutzen und nach dem standard arbeiten!! (iostream -.h, ..)
-
sasha schrieb:
wie kann mann nur so bloede antwort geben !!!
Naja, deine Frage ist nicht gerade sehr toll.... um nciht zu sagen "blöd", aber wollte dir wenigstens ein bischen weiter helfen, weil dafür ist so ein Forum da. Wenn es dich jedoch stört, dass die jemand eine Antwort auf deine Fragen gibt, die du so nciht erwartet hast, solltest du lernen deine Fragen besser zu formulieren. Insbesonder solche dinge wie tags zu benutzen, nicht seitenweise quellcode zu posten usw....
Achja und ein bischen Freundlichkeit kann auch nicht schaden!
-
sasha schrieb:
wie kann mann nur so bloede antwort geben !!!
es ist blöd 2 dinA4 seiten code zu posten, veraltete header zu nutzen, void main statt int main zu schreiben und defines für konstanten zu nutzen. aber was nicht blöd ist, ist Slins antwort.
//edit es ist auch blöd, seine variablen n, v, t oder m zu nennen und funktionen einen parameter zu übergeben, der nirgends benutzt wird(nummereingabe)