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

01.05.2009, 09:52

Frage zu cin.get()

Hi

ich will 4 Zeichen über cin.get() in ein Char-Array einlesen und anschließend wieder ausgeben. Ich habe deswegen ein Char-Array mit fünf Elementen erstellt, um hinten noch Platz für die Nullterminierung zu lassen. Über cin.get() lasse ich dann aber nur 4 Zeichen einlesen.

Der Code:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>

using namespace std;

int main() {

   char test[5];

   cin.get(test, 4);

   cout<<test;

   return 0;

}


In der cout-Ausgabe werden aber nur die ersten drei Zeichen ausgegeben, und nicht vier. Kann mir das jemand erklären? Was muss ich tun, um das richtige Ergebnis zu erhalten?

Gruß Sechem

2

01.05.2009, 10:24

http://www.cplusplus.com/reference/iostream/istream/get/

Der Parameter sagt nicht, wie viele Elemente du einlesen willst, sondern für wie viele Platz ist. Du musst dort also auch 5 angeben, das \0 sollte dann automatisch angefügt werden.
Lieber dumm fragen, als dumm bleiben!

3

01.05.2009, 10:34

Aber dann verstehe ich nicht, wieso in "C++ für Spieleprogrammierer" steht, dass man immer eins weniger in diesem Parameter angeben soll? Mein Code ist ja im Grunde genau das Gleiche wie das Beispiel im Buch.

4

01.05.2009, 11:00

Hm, es macht halt jeder mal Fehler. Aber da in der Referenz steht recht deutlich, dass bis zu n-1 Zeichen gelesen werden, und dein Compiler scheint sich daran zu halten, denn er liest ja nur 3 Zeichen.
Dann ist das eben ein Druckfehler.
Lieber dumm fragen, als dumm bleiben!

5

01.05.2009, 11:05

Entweder das, oder ich hab da noch irgendwas falsch verstanden ;)

Denn im Buch steht ja auch begründet, dass man genau eins weniger angeben soll, damit noch Platz für \0 bleibt.

Aber danke schonmal für die Hilfe!

Hat vielleicht sonst noch jemand eine Ahnung, was jetzt richtig ist, und warum?

Werbeanzeige