Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

05.09.2010, 15:18

mit "char" einen ganzen Namen erstellen

Yo,

hab grad ein kleines programm geschrieben
machen vermutlich viele hier xD
spass beiseite...
ich hab mir gedacht das man im programm seinen name eingibt und das programm dich dann begrüßt...
funktionierte nich so wie ich dachte, er spuckt nur den ersten buchstabe des names aus...
hier der quelltext:

#include <iostream>
using namespace std;
int main ()
{
//Variablen
//
char chName;
int Zahl;

//Bitte den Name einzugeben
//
cout<<"Bitte geben Sie ihren Namen ein:"<<endl;

//Spieler definiert Variable "chName"
//
cin>>chName;

//Bestätigung und Begrüßung
//
cout<<"Hallo\t"<<chName<<"\tschoen dich zu sehen"<<endl;
}

PS: danke im voraus...xD

Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

2

05.09.2010, 15:28

1. Mach mal bitte den Code vernünftig!

2. Mit cout und cin hats bei mir auch nie Fuktioniert!
Versuchs mal so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

using namespace std;

int main ()
{
  //Variablen
  char chName[512]; //ARRAY!!!
  int Zahl; //Wofür ist die überhaupt?

  //Bitte den Name einzugeben
  printf("Bitte geben Sie ihren Namen ein:");

  //Spieler definiert Variable "chName"
  gets(&chName);

  //Bestätigung und Begrüßung
  printf("Hallo\t%s\tschoen dich zu sehen", chName;
}


Falls du das so nicht kennst, erklär ich es dir gerne! ;)

Mfg Harry222

3

05.09.2010, 15:29

Hallo EnCore,

und Willkommen im Forum.

Der Datentyp char speichert nur ein einzelnes Zeichen (engl. char). Möchtest du eine Zeichenkette speichern, dann solltest du entweder ein Char-Array benutzen oder - eher zu empfehlen - ein string.

Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Char-Array
char* cName[3];
cName[0] = "M";
cName[1] = "a";
cName[2] = "x";

// String
#include <string>

std::string sName;

sName << "Max";
sName += " Mustermann";

// String als char ausgeben:
sName.c_str();


Alles weitere zu String findest du hier .

Gruß
SaRu_

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »SaRu« (05.09.2010, 16:07)


4

05.09.2010, 15:29

Nun, ein char ist dafür da, ein (1) Zeichen zu halten. Wenn du einen ganzen Namen speichern willst, also mehrere Zeichen hintereinander, brauchst ein Array (char []) oder - für Anfänger vielleicht einfacher - einen std::string:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#include <iostream> 
using namespace std; 
int main() 
{ 
    char name[32]; // Eingabe sollte bei dieser Größe maximal 31 Zeichen lang sein 
    cout << "Name: "; 
    cin >> name; 
    cout << "Hallo, " << name; 
}


Edit: Mist, zu langsam.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

5

05.09.2010, 15:31

char repräsentiert lediglich ein einziges Zeichen, sprich eine Zahl oder eben einen Buchstaben ;) Entweder du legst ein char array an (entweder per zeiger oder mit konstanter Größe, wobei letzteres vorzuziehen ist):

C-/C++-Quelltext

1
2
3
char * name;
//oder
char name[255];

Oder du benutzt gleich strings, in C++ also std::string, die erleichtern dir das ganze.

edit: Da kam ich wohl zu spät ^^
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

6

05.09.2010, 15:35

Bei

C-/C++-Quelltext

1
char * name...

müsste aber noch ein

C-/C++-Quelltext

1
...= new char[Anzahl]

dazu! ;)

Mfg Harry222

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

7

05.09.2010, 15:39

Nicht wirklich.

C-/C++-Quelltext

1
2
3
4
char *Text1 = "Foo";     
char *Text2;              
       
Text2 = "Bar";

Funktioniert beides, aber wenn ist nur die erste Variante vorzuziehen.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

8

05.09.2010, 15:44

Ist das nicht genauso, wie wenn man einen Zeiger auf eine Klasse hat:

C-/C++-Quelltext

1
Klasse *k = new Klasse;


Mfg Harry222

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

9

05.09.2010, 15:51

Ist das nicht genauso, wie wenn man einen Zeiger auf eine Klasse hat:

C-/C++-Quelltext

1
Klasse *k = new Klasse;


Mfg Harry222

Nicht genauso, hier forderst du Speicherplatz für die Adresse der Klasse an, welchen du später wieder freigeben musst. Bei dem char Zeiger zeigt der Zeiger auf den Text, bzw. auf das Array mit den Buchstaben/Zeichen. Ist so ähnlich wie bei einem Array, das du an eine Funktion übergibst, innerhalb der Funktion hast du nur einen Zeiger auf das Array bzw. auf den ersten Eintrag in diesem. Zeiger und Speicherplatz Anforderung sind nochmal zwei verschiedene Dinge.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

10

05.09.2010, 15:53

Zitat

C-/C++-Quelltext

1
2
3
4
5
// Char-Array
char cName[3];
cName[0] = "M";
cName[1] = "a";
cName[2] = "x";

das funktioniert so nicht. "M" gibt einen zeiger zurück. 'M' gibt den wert den M repräsentiert zurück.(also einen wert zwischen 0 und 255)
ich finds gar nicht so schlecht wenn ein anfänger erfährt wie ein c-string funktioniert.

du kannst dir mal den ganzen zeichensatz ausgeben lassen:

C-/C++-Quelltext

1
2
3
4
for(int i = 0; i < 256; ++i)
{
    std::cout << "zahlenwert: " << i << " zeichen: " << static_cast<char>(i) << std::endl;
}
das ist schon sehr aufschlussreich.

dem threadersteller empfehle ich den abschnitt mit dem c-strings in deinem buch nochmal zu lesen. wenn du kein buch hast dann besorg dir eins.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige