Fehler enweder mit printf oder Variablen

FoJu

Grünschnabel
Hallo, ich versuche gerade mir C++ beizubringen und bin nun an einem Punkt angekommen wo ich nicht weiterkomme. Habe schon mehrere Tutorials konsultiert und mehre Foren durchsucht (einschlieslich diesem). kann den Fehler trotzdem nicht finden.

Das unten angefügte Programm soll zwei Namen an eine Klasse übergeben und diese dann im gewünschten Format ausgeben.
Das Problem ist , dass sich das Programm zwar Kompilieren und ausführen lässt, dann aber nichts passiert.

Ich vermute, dass der Fehler bei der Übergabe der Namen liegt.

Das Programm besteht aus den Dateien: Prog6_4.cpp name.cpp und name.h
getrennt habe ich sie durch die Minuszeichen.

Für Hilfe bedanke ich mich schon mal im vorraus.

------------------------------------------------

//Prog6_4.cpp
#include <iostream.h>
#include <name.h> //selbstgeschrieben
#include <stdio.h>

int main(void)
{
Name Adam, Eva;

Adam.SetzeNamen("Adam", "Adam", "Ärmlich"); //zuweisen des ersten Namens
Eva.SetzeNamen("Eva", "Edda", "Eifrig"); //zuweisen des zweiten Namens
Adam.SetzeFormat(1); //Format setzen
Eva.SetzeFormat(2); //Format setzen
cout << "Sein Name ist: " << Adam.HoleNamen () << "\n"; //hohlt den Namen Wieder
cout << "Ihr Name ist: " << Eva.HoleNamen () << "\n"; //hohlt den Namen Wieder

return 0;

}

-----------------------------------------

//name.h
class Name {

protected:

char *ErsterVorname;
char *ZweiterVorname;
char *NachName;
static char AusStrom[61];
static int Format;

public:

void SetzeNamen(char VName1[20], char VName2[20], char NaName[20]);
char HoleNamen(void);
void SetzeFormat(int EinFormat);
};

------------------------------------

//name.cpp
#include <name.h>
#include <stdio.h>
#include <iostream.h>

int Name::Format;
char Name::AusStrom[61];

void Name::SetzeNamen(char VName1[20], char VName2[20], char NaName[20])
{
cout << VName1[20] << "\n"; //zur kontrolle ob der String richtig angekommen ist
cout << VName2[20] << "\n";
cout << NaName[20] << "\n";

*ErsterVorname = VName1[20]; // übergabe des strings
*ZweiterVorname = VName2[20];
*NachName = NaName[20];

cout << ErsterVorname << "\n"; //zur kontrolle ob der String richtig übergeben wurde
cout << ZweiterVorname << "\n";
cout << NachName << "\n";
}

char Name::HoleNamen(void)
{
switch (Format)
{
case 2 : printf(AusStrom, "%s %s %s" , ErsterVorname, ZweiterVorname, NachName); //Format1
break;
case 3 : printf(AusStrom, "%s %s %s" , ErsterVorname, NachName, ZweiterVorname); //Format2
break;
case 4 : printf(AusStrom, "%s %s %s" , NachName, ZweiterVorname, ErsterVorname); //Format3
break;
case 1 :
default : printf(AusStrom, "%s %s %s" , NachName, ZweiterVorname, ErsterVorname); //Format4
break;
}
return AusStrom[61];
}

void Name::SetzeFormat(int EinFormat)
{
Format = EinFormat;
}
 
Code:
#include <stdio.h>

int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
int asprintf(char **strp, const char *format, ...);
int dprintf(int d, const char *format, ...);

#include <stdarg.h>

int vprintf(const char *format, va_list ap);
int vfprintf(FILE *stream, const char *format, va_list ap);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
int vasprintf(char **strp, const char *format, va_list ap);
int vdprintf(int d, const char *format, va_list ap);


Will damit sagen, dass deine Art das printf zu verwenden, falsch ist.
 
Danke für die schnelle Antwort aber leider Kann ich aus dem Code nicht erkennen wie es für mein Bsp. richtig verwendet wird.
 
Code:
char * Name::HoleNamen(void)
{
    switch (Format)
    {
           case 2 : sprintf(AusStrom, "%s %s %s" , ErsterVorname, ZweiterVorname, NachName); break;
           case 3 : sprintf(AusStrom, "%s %s %s" , ErsterVorname, NachName, ZweiterVorname); break;
           case 4 : sprintf(AusStrom, "%s %s %s" , NachName, ZweiterVorname, ErsterVorname); break;
           case 1 :
           default : sprintf(AusStrom, "%s %s %s" , NachName, ZweiterVorname, ErsterVorname); break;
      }
      return AusStrom;
}


Mit sprintf schreibst du in einem Puffer. So wie du es anscheinend machen willst.
 
Habe es wie von Dir beschrieben korregiert. Leider besteht das ursprüngliche Problem immer noch. Es erfolgt keine Ausgabe.
 
Jeha

Habe/die den Fehler gefunden.
Falls jemand das gleiche (oder änliches) Problem hat, habe ich die änderungen mit rot markiert

----------------------------------------------------

// Prog6_4.cpp
#include <iostream.h>
#include <name.h> //selbstgeschrieben
#include <stdio.h>

int main(void)
{
Name Adam, Eva;

Adam.SetzeNamen("Adam", "Adam", "Bidensen"); //zuweisen des ersten Namens
Eva.SetzeNamen("Eva", "Edda", "Eifrig"); //zuweisen des zweiten Namens
Adam.SetzeFormat(1); //Format setzen
Eva.SetzeFormat(2); //Format setzen
cout << "Sein Name ist: " << Adam.HoleNamen () << "\n"; //hohlt den Namen Wieder
cout << "Ihr Name ist: " << Eva.HoleNamen () << "\n"; //hohlt den Namen Wieder

return 0;

}

---------------------------------------------------

//name.h
class Name {

protected:

char *ErsterVorname;
char *ZweiterVorname;
char *NachName;
static char AusStrom[80];
static char Format;

public:

void SetzeNamen(char VName1[20], char VName2[20], char NaName[20]);
char *HoleNamen(void);
void SetzeFormat(int EinFormat);
};

---------------------------------------------------------

//name.cpp
#include <name.h>
#include <stdio.h>
#include <iostream.h>

char Name::Format;
char Name::AusStrom[80];

void Name::SetzeNamen(char VName1[20], char VName2[20], char NaName[20])
{
cout << VName1 << "\n"; //zur kontrolle ob der String richtig angekommen ist
cout << VName2 << "\n";
cout << NaName << "\n";

//name.cpp
#include <name.h>
#include <stdio.h>
#include <iostream.h>

char Name::Format;
char Name::AusStrom[80];

void Name::SetzeNamen(char VName1[20], char VName2[20], char NaName[20])
{
cout << VName1 << "\n"; //zur kontrolle ob der String richtig angekommen ist
cout << VName2 << "\n";
cout << NaName << "\n";

ErsterVorname = VName1; // übergabe des strings
ZweiterVorname = VName2;
NachName = NaName;


cout << ErsterVorname << "\n"; //zur kontrolle ob der String richtig übergeben wurde
cout << ZweiterVorname << "\n";
cout << NachName << "\n";
}

char *Name::HoleNamen(void)
{
switch (Format)
{
case 2 : sprintf(AusStrom, "%s %s %s" , ErsterVorname, ZweiterVorname, NachName); //Format1
break;
case 3 : sprintf(AusStrom, "%s %s %s" , ErsterVorname, NachName, ZweiterVorname); //Format2
break;
case 4 : sprintf(AusStrom, "%s %s %s" , NachName, ZweiterVorname, ErsterVorname); //Format3
break;
case 1 :
default : sprintf(AusStrom, "%s %s %s" , NachName, ZweiterVorname, ErsterVorname); //Format4
break;
}
return AusStrom;
}

void Name::SetzeFormat(int EinFormat)
{
Format = EinFormat;
}
 
Zurück