Char Array bis Terminierung ausgeben
-
Hi ich möchte einfach nur einen eingegeben String als Char Array ausgeben -.-
char name[100]; cout << "Name: "; scanf("%s", name ); for ( int i = 0; i == '\n'; i++ ) { cout << name[i]; }
Ich habe es auch schon mit cin.get und als Terminierung in der Schleife mit 0x00 oder '\0' versucht
Aber es wird entweder nur das erste Zeichen oder aber das komplette Array mit irgendwelchen Zeichen ausgegeben
-
Warum scanf()?
char Array[50]; // Array mit 50 Elementen cin >> Array; // Eingabe cout << "Alle Elemente von " << Array << ":" << endl; for (size_t i=0; Array[i]; i++) // Elemente einzeln durchsuchen // bei '\0' ergibt die Bedingung false cout << Array[i] << endl;
gruss
Cartman
-
oder:
char arr[50]; std::cin >> arr; char* tmp = arr; while ( *tmp ) std::cout << *tmp++;
-
Eric Cartman schrieb:
Warum scanf()?
Ich würd mit der Frage noch viel früher ansetzen: warum char[] ?
std::string name; std::cin >> name; std::cout << name;
-
Warum vergleichst du in der Schleife i mit '\n' und nicht name[i]?
-
Eric Cartman schrieb:
char Array[50]; // Array mit 50 Elementen cin >> Array; // Eingabe cout << "Alle Elemente von " << Array << ":" << endl; for (size_t i=0; Array[i]; i++) // Elemente einzeln durchsuchen // bei '\0' ergibt die Bedingung false cout << Array[i] << endl;
Ok scanf() war blöd, aber klappt auch :>
Ich verstehe das nur nicht ganz in der Bedingung(Array[i]).
So weit ich weiss bedeutet dass, führe die Schleife so lange aus bis das Array ungültig bzw. terminiert ist.Aber wieso kann ich dann nicht einfach i == '\0' schreiben ?
-
bakoora schrieb:
Eric Cartman schrieb:
char Array[50]; // Array mit 50 Elementen cin >> Array; // Eingabe cout << "Alle Elemente von " << Array << ":" << endl; for (size_t i=0; Array[i]; i++) // Elemente einzeln durchsuchen // bei '\0' ergibt die Bedingung false cout << Array[i] << endl;
Ok scanf() war blöd, aber klappt auch :>
Ich verstehe das nur nicht ganz in der Bedingung(Array[i]).
So weit ich weiss bedeutet dass, führe die Schleife so lange aus bis das Array ungültig bzw. terminiert ist.Aber wieso kann ich dann nicht einfach i == '\0' schreiben ?
Weil i ein verfickter Integer ist und nicht dein Array!!!!!!!!!!!1111111111
-
bakoora schrieb:
Eric Cartman schrieb:
char Array[50]; // Array mit 50 Elementen cin >> Array; // Eingabe cout << "Alle Elemente von " << Array << ":" << endl; for (size_t i=0; Array[i]; i++) // Elemente einzeln durchsuchen // bei '\0' ergibt die Bedingung false cout << Array[i] << endl;
Ok scanf() war blöd, aber klappt auch :>
Ich verstehe das nur nicht ganz in der Bedingung(Array[i]).
So weit ich weiss bedeutet dass, führe die Schleife so lange aus bis das Array ungültig bzw. terminiert ist.Aber wieso kann ich dann nicht einfach i == '\0' schreiben ?
Vorsicht. i ist ein unsigned int (size_t) und ist nur fuer die Zaehlung dar. Das Nullzeichen wird bei der Benutzereingabe (wie bei cin) automatisch angehangen, wie auch bei vielen Operationen mit Strings in C++ (z.B. wenn man Stringliterale uebergibt wird immer automatisch das Nullzeichen am Ende angehaengt). Wenn ein Array-Element das Nullzeichen '\0' enthaelt wird false zurueckgegeben, ansonsten true. Das liegt afaik, dass das Nullzeichen in der ASCII-Liste bei 0 beginnt und 0 konvertiert C++ zu false (andere Werte dagegen true).
So weit ich weiss bedeutet dass, führe die Schleife so lange aus bis das Array ungültig bzw. terminiert ist.
Das ist ein weit verbreiteter Irrglaube und definitiv falsch.
Gruss
Cartman
-
Jo klar mit i wird ja nur gezählt, habs verstanden danke -.-
// edit
Aber man kann Array[i] != '\0' schreiben (so verstehe ich das besser).
-
bakoora schrieb:
Jo klar mit i wird ja nur gezählt, habs verstanden danke -.-
// edit
Aber man kann Array[i] != '\0' schreiben (so verstehe ich das besser).
Ja kann man. Hat diesselbe Bedeutung.
Sogar folgendes ist moeglich; auch bei Arrays anderen Typs:i < sizeof(Array)/sizeof(Array[0])
Die Groesse des Arrays ergibt sich durch die Anzahl der Elemente mal sizeof(dertyp). Wenn du das wieder durch ein Element teilst hast du die Anzahl aller Elemente - logischerweise.
Aber VORSICHT: Funktioniert nicht mit Arrays, die du zur Laufzeit mitnew
erstellt hast (auf dem Heap gelagert).Gruss
Cartman
-
Eric Cartman schrieb:
Aber VORSICHT: Funktioniert nicht mit Arrays, die du zur Laufzeit mit
new
erstellt hast (auf dem Heap gelagert).Genauer: Es funktioniert nicht mit Zeigern. Im folgenden Beispiel ist nichts dynamisch allokiert, trotzdem erhält man das falsche Resultat.
int Array[5]; sizeof(Array)/sizeof(Array[0]); // == sizeof(int[5]) / sizeof(int) == 5 int* Ptr = Array; sizeof(Ptr)/sizeof(Ptr[0]); // == sizeof(int*) / sizeof(int)
Dem Problem kann man sowieso ganz aus dem Weg gehen, indem man Container nutzt.