• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[C++] Adressverwaltungsprogramm funktioniert nicht richtig

Status
Für weitere Antworten geschlossen.

Feld

Neues Mitglied
Hallo,
Ich habe ein Adressverwaltungsprogramm geschrieben. Als erstes wird über das Menü abgefragt was ich machen will. Also Adressen eingeben. Danach springt das Programm wieder in die Switch-Case Konstruktion und fragt mich was ich als nächste machen will. Will ich z.B alle Daten ausgeben sollte mir das Programm alle Daten die ich voher eingegeben habe ausgeben. Nur das passiert nicht. Oder wenn ich z.B einen Datensatz ändern will was über die Funktion loeschenaendern() passieren soll springt das Programm in die if Anweisung und gibt aus Liegt ausserhalb des Bereichs. Das Programm darf keine Klassen enthalten (Vorgabe). Hatt einer eine Idee für mich:idea: Auch Verbesserungsvorschläge nehme ich gerne entgegen:idea:.

Code:
#include <iostream>
struct person{
char vorname[80];
char nachname[80];
char telefonnummer[80];
}person[100];


struct ausgabe{
struct adrausgabe;
struct loeschenaendern;
struct anzeigen;
};

void anzeigen()
{
int i;
cout << "Vorname : \n"; 
cout << "Nachname : \n";
cout << "Tele : \n";

for (i=0; i<i; i++)
{
cin.getline(person[i].vorname,80),(person[i].nachname,80);
cin.getline(person[i].telefonnummer,80);
}
}

void loeschenaendern()
{
int i;
cout <<"Welchen Satz möchten Sie aendern";
cin >> i;
if (i<0 || i>i)
{
cout << "Liegt ausserhalb des Bereichs";
}
else
{
cout <<"Geben Sie Ihren Vorname und Nachnamen ein \n";
cin.getline(person[i].vorname,80),(person[i].nachname,80);
cout <<"Geben Sie eine Telefonnumer ein \n";
cin.getline(person[i].telefonnummer,80);
cout << person[i].vorname << " " << person[i].nachname << " " <<person[i].telefonnummer <<endl;
}
}

void adrausgabe()
 {
 int i;
 for(i=0; i<=2; i++)
{
cout <<"Geben Sie Ihren Vorname und Nachnamen ein \n";
cin.getline(person[i].vorname,80),(person[i].nachname,80);
cout <<"Geben Sie eine Telefonnumer ein \n";
cin.getline(person[i].telefonnummer,80);
cout << person[i].vorname << " " << person[i].nachname << " " <<person[i].telefonnummer <<endl;
}
}

int main(){

char eingabe;

do
{
cout << "Was wollen Sie tun" <<endl;
cin >> eingabe;
getchar();

switch(eingabe)
{
case 'j':
 adrausgabe();
 break;
case 'n':
exit(0);  // Beendet das Programm komplett
break;
case 'a':
  loeschenaendern();
case 'p':
  anzeigen();
 break;
default:
cout << "Die Eingabe ist ungueltig!\n";
break;
}
} while(eingabe == 'j' || eingabe == 'n' || eingabe == 'a' || eingabe == 'n' || eingabe =='p' || eingabe =='n');

return 0;

 char p[50];
cin.getline(p,50);
}
MfG
Feld
 
Zuletzt bearbeitet von einem Moderator:
1. Füge zuerst einmal bitte die Code Tags da ein: [HT
Code:
ML][/HT
Code:
ML]
2. Ändere den Titel dieses Threads, wer hier etwas fragt, bei dem klappt ein Programm meistens nicht. Du bist doch bestimtm auch über Google hier gekommen. Google braucht aber anständige Titel dafür. ;-)

Gruß Corvulus
 
Zuerst bei meinen Compiler funktioniert das Programm nicht, ich denke bei deinen auch nicht.

Vergessen hast du den namespace:
Code:
using namespace std;
Am Anfang

Sonst müsstest du an jedem cout und cin noch ein std:: setzen also: std::cout, std::cin

Programm funktioniert

Noch ein Tipp:
Rücke deinen Code bitte ein.

In deinem STRUCT sind Arrays wie vornamen[80] usw. wenn du jetzt bei deiner Ausgabe schreibst:
Code:
'person[i].vorname'[color=red][wert muss hier natürlich auch sein][/color]

kann das auch nicht so recht funktionieren.
Deswegen musst du dort beispielsweise auch dein i angeben:
Code:
person[i].vorname[i]
 
Zuletzt bearbeitet:
1. Füge zuerst einmal bitte die Code Tags da ein:
HTML:
2. Ändere den Titel dieses Threads, wer hier etwas fragt, bei dem klappt ein Programm meistens nicht. Du bist doch bestimtm auch über Google hier gekommen. Google braucht aber anständige Titel dafür. ;-)

Gruß Corvulus
1.) Code-Tags von w7 eingefügt
2.) Titel von w7 geändert

MODEDIT: w7: Anpassung
 
Hallo,

In deinem STRUCT sind Arrays wie vornamen[80] usw. wenn du jetzt bei deiner Ausgabe schreibst:
Code:
'person[i].vorname'[COLOR=red][wert muss hier natürlich auch sein][/COLOR]
kann das auch nicht so recht funktionieren.
Deswegen musst du dort beispielsweise auch dein i angeben:
Code:
person[i].vorname[i]
Das sind zero-terminated Strings und es funktioniert auch so. Der Fehler liegt am vorherigen cin, da es das Newline Zeichen im Buffer lässt und so das nächste getline() einen leeren String liefert. cin.ignore() schafft hier abhilfe.

Code:
cin.getline(person[i].vorname,80),(person[i].nachname,80);
Das hier liest nur den Vornamen. Der zweite Teil hinter dem Komma ist eine "leere" Anweisung und gehört nicht mehr zum getline.

Code:
i>i
Macht wenig Sinn, ich denke mal du meintest
Code:
i>=100

N43
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben