Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > C/C++, Visual C++, Visual C++.NET

C/C++, Visual C++, Visual C++.NET Fragen und Antworten zu C/C++, Visual C++ und Visual C++.NET

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50849, Antworten: 1390
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26615, Antworten: 4194
Gehe zum ersten neuen Beitrag Windows Oberfläche (Schrift,...
Aufrufe: 176, Antworten: 10
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 63, Antworten: 5
Gehe zum ersten neuen Beitrag TabCtrl
Aufrufe: 121, Antworten: 12
Gehe zum ersten neuen Beitrag Rechner fährt herunter,...
Aufrufe: 93, Antworten: 4
Gehe zum ersten neuen Beitrag Dateien lassen sich nicht...
Aufrufe: 17, Antworten: 2
Gehe zum ersten neuen Beitrag Suche Programm um Werbung zu...
Aufrufe: 49, Antworten: 2
Gehe zum ersten neuen Beitrag McAfee AVERT Stinger...
Aufrufe: 13, Antworten: 0
Gehe zum ersten neuen Beitrag Sticky Password 6.0.2...
Aufrufe: 25, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28.11.2005, 21:36   #1 (Direktlink)
Hilfesuchender
Gast
 
Beiträge: n/a
Standard Probleme mit Programierung eines Telefonbuches

Ich probiere gerade ein Telefonbuch mit c++ zu programieren
es soll 100 einträge speichern eingeben anzeigen und löschen können.

Ich bin echt am verzweifeln ich bin mir sicher das das system richtig ist. Aber irgendwie habe ich kleine Fehler eingebaut und ich weiss nicht wie ich die rauskriegen soll.
Wäre nett wenn mal einer drüberschaut und mir sagt ob ich total falsch an die sache rangehe oder ob ich einfach was übersehen habe.

Danke schonmal im Voraus!


#include<iostream.h>
int nummer;
int vorname;
int nachname;
int telefonnummer;

struct person{
char nachname[80];
char vorname[80];
int telefonnummer;
};
person telefonbuch[100];

void initialisierung(){
person telefonbuch[100];
int i;
for(int i=0;i<=100;i++);
if (telefonbuch[i].nachname>0)i++;
else;
telefonbuch[i].nachname=nachname;
telefonbuch[i].vorname=vorname;
telefonbuch[i].telefonnummer=telefonnummer;
};

void eingabe(){
cout<<"Geben Sie den Nachnamen ein:"<<endl;
cin>>nachname;
cout<<"Geben Sie den Vornamen ein:"<<endl;
cin>>vorname;
cout<<"Geben Sie die Telefonnummer ein:"<<endl;
cin>>telefonnummer;
}

void anzeige(){
person telefonbuch[100];
int i;
for(int i=0;i<=100;i++)
cout<<"Geben Sie den Namen ein den Sie suchen:"<<endl;
cin>>nachname;
if (telefonbuch[i].nachname!=nachname)i++;
else;
cout<<telefonbuch[i].nachname<<endl;
cout<<telefonbuch[i].vorname<<endl;
cout<<telefonbuch[i].telefonnummer<<endl;
}

void loeschen(){
person telefonbuch[100];
int i;
cout<<"Geben Sie den Namen ein den Sie loeschen wollen:"<<endl;
cin>>nachname;
if (telefonbuch[i].nachname!=nachname)i++;
else;
telefonbuch[i].nachname=0;
telefonbuch[i].vorname=0;
telefonbuch[i].telefonnummer=0;
}

void nummereingabe(){
int i;
do{
cout<<"Geben Sie die Nummer für die Funktion ein"<<endl;
cout<<"Sie haben folgende möglichkeiten"<<endl;
cout<<"Eingabe = 0, Anzeigen = 1, Loeschen = 2"<<endl;
cin>>i;
if (i>2) cout <<"Sie haben eine Falsche Zahl eingegeben"<<endl;
cout <<"Ihre Zahl war:"<<i <<endl;
cout <<"Versuchen Sie es nocheinmal";
else;
nummer=i;
}while (i>2);


void main(){
initialisierung();
char nummer;
nummerneingabe();
switch(nummer){
case '0':
eingabe();
break;
case '1':
anzeige();
break;
case '2':
loeschen();
break;

char p[50];
cin.getline(p,50);
cin.getline(p,50);
}
  Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 28.11.2005, 22:01   #2 (Direktlink)
Dauergast
 
Registriert seit: 06.05.2004
Ort: Düsseldorf
Beiträge: 1.672
Standard

*hüstel*
hmmmhh da ist so wie es aussieht ein Grundlegender Denkfehler drin....
Code:
int a; //Das ist eine globale Variabel.
void MeineErsteFunktion()
{
int a;//Das ist eine lokale Variabel, diese hat nichts mit der globalen Variabel zu tun
a=10;//Die lokale Variabel wird geändert, aber nicht die globale
}
void MeineZweiteFunktion()
{
cout<<a; //tja welcher Wert wird da angezeigt? wenn es 10 ist, ist das reiner Zufall
}
Also kurz gesagt, aus den einzelnen Funktionen das person telefonbuch[100]; entfernen


Die Funktion Eingabe kann so nicht funktionieren, du musst schon irgendwo angeben welches telefonbuch Element gemeint ist.

Die Funktion anzeige ist irgendwie ziemlich falsch, erstens ist int i doppelt,
telefonbuch[i].nachname!=nachname kann so nicht funktionieren Zeichenketten müssen mit srtcmp o.ä. verglichen werden und irgendwie fehlt da eine { }, aber irgendwie stimmt diese ganze for Schleife so nicht. Bei der löschen funktion irgendwie das selbe.

und bei else; ist das ; falsch.

Peter
lastwebpage ist offline   Mit Zitat antworten
Alt 28.11.2005, 22:18   #3 (Direktlink)
Hilfesuchender
Gast
 
Beiträge: n/a
Standard

erstmal danke für die schnelle Antwort

Mein gröstes Problem ist wie bekomme ich die eingabe dazu mir die einzelnen daten in die structur einzulesen ohne irgendwas zu überschreiben das versuche ich mit der initialisierung und dazu benutze ich ja die funktion mit dem i++ da hänge ich aber total und weiss nicht ob das so wirklich richtig ist !
  Mit Zitat antworten
Alt 28.11.2005, 23:04   #4 (Direktlink)
Dauergast
 
Registriert seit: 06.05.2004
Ort: Düsseldorf
Beiträge: 1.672
Standard

Hier mal eine Beispiellösung, ob die so stimmt, tja da fehlen ein paar angaben zu...
Code:
#include<iostream.h> 

struct person{ 
char nachname[80]; 
char vorname[80]; 
int telefonnummer; 
};
//Beide nachfolgenden Variabeln sind überflüssig, das könnte man auch besser machen!
person telefonbuch[100];
int Eingabenummer;

//Ich weiis nicht was die ursprüngliche Version machen sollte, diese hier setzt das Feld auf Null
void initialisierung()
{ 
	Eingabenummer=-1;
	for(int i=0;i<100;i++)
	{
		telefonbuch[i].nachname='\0'; 
		telefonbuch[i].vorname='\0';
		telefonbuch[i].telefonnummer=0; 
	}
} 

void eingabe()
{
/* entweder
	for(int i=0;i<100;i++)
	{
		cout<<"Geben Sie den Nachnamen ein:"<<endl; 
		cin>>telefonbuch[i].nachname; 
		cout<<"Geben Sie den Vornamen ein:"<<endl; 
		cin>>telefonbuch[i].vorname; 
		cout<<"Geben Sie die Telefonnummer ein:"<<endl; 
		cin>>telefonbuch[i].telefonnummer;
	}
*/
/*oder
	int index;
	for(;;)
	{
		cout<<"Geben Sie eine indexnummer von 0-99 ein";
		cin>>index;
		if(index<0 || index >99)
			break;
		cout<<"Geben Sie den Nachnamen ein:"<<endl; 
		cin>>telefonbuch[index].nachname; 
		cout<<"Geben Sie den Vornamen ein:"<<endl; 
		cin>>telefonbuch[index].vorname; 
		cout<<"Geben Sie die Telefonnummer ein:"<<endl; 
		cin>>telefonbuch[index].telefonnummer;
	}
*/
}

//bei folgenden 2 Funktionen ging ich davon aus das die indexnummer eingegeben werden soll, nicht der Name
void anzeige()
{ 
	int index;
	cout<<"Geben Sie den Indexnummer (0-99) ein den Sie suchen:"<<endl; 
	cin>>index; 
	if(index>-1 && index<100)
	{
		if(telefonbuch[index].nachname=='\0')
		{
			cout<<"Kein Namenseintrag an dieser Indexnummer"<<endl;
		}
		else
		{
			cout<<telefonbuch[index].nachname<<endl; 
			cout<<telefonbuch[index].vorname<<endl; 
			cout<<telefonbuch[index].telefonnummer<<endl;
		}
	}
}

void loeschen()
{ 
	int index; 
	cout<<"Geben Sie die Indexnummer (0-99) an ein den Sie loeschen wollen:"<<endl; 
	cin>>index; 
	if(index>-1 && index<100)
	{
		telefonbuch[i].nachname='\0'; 
		telefonbuch[i].vorname='\0'; 
		telefonbuch[i].telefonnummer=0; 
	}
}

void nummereingabe()
{ 
	cout<<"Geben Sie die Nummer für die Funktion ein"<<endl; 
	cout<<"Sie haben folgende Möglichkeiten"<<endl; 
	cout<<"Eingabe = 0, Anzeigen = 1, Loeschen = 2"<<endl; 
	cin>>Eingabenummer; 
	cout <<"Ihre Zahl war:"<<Eingabenummer <<endl; 
	cout <<"Versuchen Sie es nocheinmal"; 
	if(Eingabenummer<0 || Eingabenummer>2)
		cout>>"Ihre Eingabe war ungültig,Programm wird beendet!";
}

void main()
{ 
	initialisierung(); 
	do
	{
		nummerneingabe(); 
		switch(Eingabenummer)
		{ 
			case '0': 
				eingabe(); 
			break; 
			case '1': 
				anzeige(); 
			break; 
			case '2': 
				loeschen(); 
			break; 
		}
	}while(Eingabenummer>-1 && Eingabenummer<3)
	/* folgende Zeilen sind unklar deshalb auskommentiert
	char p[50]; 
	cin.getline(p,50); 
	cin.getline(p,50); 
	*/
}
lastwebpage ist offline   Mit Zitat antworten
Alt 28.11.2005, 23:44   #5 (Direktlink)
Hilfesuchender
Gast
 
Beiträge: n/a
Standard

ui das war schonmal sehr hilfreich habe das programm jetzt schon stark verändert und denke das ich jetzt langsam auf dem richtigen weg bin.

aber dieses mit dem for(int i=0;i<100;i++)
verstehe ich irgendwie nicht ganz

ich möchte ja mit der initalisierung abfragen ob der platz noch frei ist und dann etwas eintragen also einen leeren string benutzen!

genauso möchte ich auch mit for(int i=0;i<100;i++)
einen namen abfragen der in der strucktur gespeichert ist.
da komme ich durcheinander .

mehr angaben kann ich dir gerne geben!

Punkt 1 Telefonbuch mit 100 Einträgen

Punkt 2 Funktion initialisierung für die zuweisung auf einen leeren String

Punkt 3 Ich möchte Eingeben Anzeigen und Löschen
mit den Funktionen eingabe(); anzeige(); loeschen();

Punkt 3 Funktion nummereingabe()
was ich für die abfrage benutze was gemacht werden soll
eingeben anzeigen löschen

Punkt 4 meine main()-Funktion mit der ich die Aktionen auswähle dies mache ich mit switch case.
  Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 29.11.2005, 00:36   #6 (Direktlink)
Dauergast
 
Registriert seit: 06.05.2004
Ort: Düsseldorf
Beiträge: 1.672
Standard

Zitat:
Zitat von Hilfesuchender
...
aber dieses mit dem for(int i=0;i<100;i++)
verstehe ich irgendwie nicht ganz
ich möchte ja mit der initalisierung abfragen ob der platz noch frei ist und dann etwas eintragen also einen leeren string benutzen!
...
Punkt 2 Funktion initialisierung für die zuweisung auf einen leeren String
Das widerspricht sich....

Nein ich glaube wohl eher das initialisieren Funktion, das Feld auf einen bestimmten Wert setzen soll in dem es ALLE einträge auf Null setzt.
Du kannst die Funktion ja mal nicht aufrufen, dir wird auffallen das du ein Feld mit 100 zufälligen einträgen hast.

Wenn du sttat der Indexnummer bei Anzeig enach einem namen suchen willst:
Code:
#include<iostream.h>
#include<string.h> //für strcmp


void anzeige() 
{ 
   char suchname[80]; 
   cout<<"Geben Sie einen Namen ein:"<<endl; 
   cin>>suchname; 
   for(int i=0;i<100;i++) 
   { 
      if(strcmp(suchname,telefonbuch[index].nachname)==0) 
      { 
         cout<<telefonbuch[index].nachname<<endl; 
         cout<<telefonbuch[index].vorname<<endl; 
         cout<<telefonbuch[index].telefonnummer<<endl;
         break;
      }
      else
      {
         cout<<"Name wurde nicht gefunden"<<endl;
         break;
      }
   } 
}
lastwebpage ist offline   Mit Zitat antworten
Alt 29.11.2005, 17:30   #7 (Direktlink)
Hilfesuchender
Gast
 
Beiträge: n/a
Standard

So habe mir alles mal durch den Kopf gehen lassen und das programm mit meinen Kentnissen und deinen Hilfestellungen jetzt so zusammengestellt.

Ich finde es sieht gut aus aber Borland meint bei diesen Stellen
Code:
telefonbuch[i].nachname='\0';
telefonbuch[i].vorname='\0';
das ihm ein L wert fehlt meiner meinung nach bedeutet das er nicht weiss wie er etwas zuordnen soll aber die Structur stimmt doch oder hab ich da schon wieder was total verhauen ?

oder kann das was mit den cin.getline Befehlen zu tun haben ?

Und nochmal danke für deine nette Unterstützung!

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

struct person{
char nachname[80];
char vorname[80];
int telefonnummer;
};
person telefonbuch[100];
int Eingabenummer;


void initialisierung()
{     Eingabenummer =-1;
      for(int i=0;i<100;i++)
{
      telefonbuch[i].nachname='\0';
      telefonbuch[i].vorname='\0';
      telefonbuch[i].telefonnummer=0;
}}

void eingabe()
{

   for(int i=0;i<100;i++)
   {
      cout<<"Geben Sie den Nachnamen ein:"<<endl;
      cin>>telefonbuch[i].nachname;
      cout<<"Geben Sie den Vornamen ein:"<<endl;
      cin>>telefonbuch[i].vorname;
      cout<<"Geben Sie die Telefonnummer ein:"<<endl;
      cin>>telefonbuch[i].telefonnummer;
   } }
  void anzeige()
{
   char suchname[80];
   cout<<"Geben Sie einen Namen ein:"<<endl;
   cin>>suchname;
   for(int i=0;i<100;i++)
   {
      if(strcmp(suchname,telefonbuch[i].nachname)==0)
      {
         cout<<telefonbuch[i].nachname<<endl;
         cout<<telefonbuch[i].vorname<<endl;
         cout<<telefonbuch[i].telefonnummer<<endl;
         break;
      }
      else
      {
         cout<<"Name wurde nicht gefunden"<<endl;
         break;
      }
   }
}
  void loeschen()
{
   char suchname[80];
   cout<<"Geben Sie einen Namen ein:"<<endl;
   cin>>suchname;
   for(int i=0;i<100;i++)
   {
      if(strcmp(suchname,telefonbuch[i].nachname)==0)
      {
      telefonbuch[i].nachname='\0';
      telefonbuch[i].vorname='\0';
      telefonbuch[i].telefonnummer=0;
         break;
      }
      else
      {
         cout<<"Name wurde nicht gefunden"<<endl;
         break;
      }
   }
}
void nummereingabe()
{
   cout<<"Geben Sie die Nummer für die Funktion ein"<<endl;
   cout<<"Sie haben folgende Möglichkeiten"<<endl;
   cout<<"Eingabe = 0, Anzeigen = 1, Loeschen = 2"<<endl;
   cin>>Eingabenummer;
   cout <<"Ihre Zahl war:"<<Eingabenummer <<endl;
   cout <<"Versuchen Sie es nocheinmal";
   if(Eingabenummer<0 || Eingabenummer>2)
      cout<<"Ihre Eingabe war ungültig,Programm wird beendet!";
}

void main()
{
   initialisierung();
   do
   {
      nummereingabe();
      switch(Eingabenummer)
      {
         case '0':
            eingabe();
         break;
         case '1':
            anzeige();
         break;
         case '2':
            loeschen();
         break;
      }
   }while(Eingabenummer>-1 && Eingabenummer<3);

   char p[50];
   cin.getline(p,50);
   cin.getline(p,50);
   }
  Mit Zitat antworten
Alt 29.11.2005, 18:19   #8 (Direktlink)
Dauergast
 
Registriert seit: 06.05.2004
Ort: Düsseldorf
Beiträge: 1.672
Standard

in jeder Zeiel wo telefonbuch[i] vorkommt oder nur in der mit '\0' ?
lastwebpage ist offline   Mit Zitat antworten
Alt 29.11.2005, 20:33   #9 (Direktlink)
Hilfesuchender
Gast
 
Beiträge: n/a
Standard

nur die mit '\0'
  Mit Zitat antworten
Alt 29.11.2005, 20:46   #10 (Direktlink)
Dauergast
 
Registriert seit: 06.05.2004
Ort: Düsseldorf
Beiträge: 1.672
Standard

OK dann probier mal telefonbuch[i].nachname[0]='\0';
lastwebpage ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 30.11.2005, 11:35   #11 (Direktlink)
Gastleser
Gast
 
Beiträge: n/a
Standard

telefonbuch[i].nachname='\0';

Warum machste nicht einfach; telefonbuch[i].nachname="" ; ?

Es soll ja ein leerer STRING zugewiesen werden und der wird mit Anführungszeichen, nicht mit Abostroph zugewiesen . Das \0 wird ja automatisch angehängt.
  Mit Zitat antworten
Alt 30.11.2005, 11:45   #12 (Direktlink)
Gastleser
Gast
 
Beiträge: n/a
Standard

Uii hab ich da nen Müll geschrieben, bitte vergessen , kann ja nicht klappen
  Mit Zitat antworten
Alt 30.11.2005, 11:49   #13 (Direktlink)
Dauergast
 
Registriert seit: 06.05.2004
Ort: Düsseldorf
Beiträge: 1.672
Standard

Hallo...
wenn überhaupt strcpy(Zeichenkette,"");
Zeichenkette="Hallo", neeee das klappt in Basic vielleicht, bei der initialisierung, oder wenn man die Klasse String /CString verwendet, später nicht mehr.
"" ist eine Zeichenkette , '' ein einzelnes Zeichen.
so und Zeichenkette[0] und Zeichenkette verweisen beide auf die Adresse des ersten ZEICHENS bzw. auf den Beginn der Zeichenkette...


UUUPPPPSSSSS ja da haben wir ja den Fehler
Habt ihr schon Zeiger behandelt ? Wenn Nein nimm Strcpy()
lastwebpage ist offline   Mit Zitat antworten
Alt 30.11.2005, 11:50   #14 (Direktlink)
Gastleser
Gast
 
Beiträge: n/a
Standard

Also ich würds so schreiben:

void initialisierung ()
{
int i;
for (i=0; i<100; i++)
{
strcpy(telefonbuch[i].vorname,"");
strcpy(telefonbuch[i].nachname,"");
}
}
  Mit Zitat antworten
Alt 30.11.2005, 12:20   #15 (Direktlink)
Dauergast
 
Registriert seit: 06.05.2004
Ort: Düsseldorf
Beiträge: 1.672
Standard

Also nochmals zusammengefasst,
folgende Initialisierungen sind möglich:

char Zeichenkette[]="Hallo";
strcpy(Zeichenkette,""); //oder auch andere Stringfunktionen

char Zeichenkette[100];
Zeichenkette[0]='\0'; //Apostroph keine Anführungszeichen !!!,oder auch=0

char Zeichenkette[100];
char *ptr,
ptr=Zeichenkette;
*ptr='\0'; // oder auch gleich Null
(Wenn du das letzte nicht verstehst, das sind Zeiger. Solche Konstruktionen sind ziemlich häufog zu finden.)
lastwebpage ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > C/C++, Visual C++, Visual C++.NET

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an




Alle Zeitangaben in WEZ +2. Es ist jetzt 05:26 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2