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

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

1

27.02.2006, 15:16

Problem mit 'cin'

Wenn ich das folgende C++ Programm zu Kompillieren(oder wie man des schreibt), geht noch alles.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;

int main()
{
char name[64];
cout << "Bitte geben sie ihren Namen ein: ";
cin >> name;
cout << "\n\n\nIhr name ist " << name;
}


Wenn ich dann aber Faule Socke eingeben will, gibt der nur "Faule" aus. Weis jemand, wie man machen kann, das man den ganzen Namen eingeben kann???

Ich bedanke mich schon mal für alle Antworten!!!!!

DaRich

Frischling

Beiträge: 24

Wohnort: Ingolstadt

Beruf: Student

  • Private Nachricht senden

2

27.02.2006, 15:29

Hallo

versuch es mal so

C-/C++-Quelltext

1
cin.get(name, 64);


cin.get entspricht der C-Funktion get,
cin hingegen arbeitet wie scanf und die schneidet nach einem leerzeichen ab.

gruß
>>> DaRich <<<

riCo

Treue Seele

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

3

27.02.2006, 15:33

Verwende doch getchar() anstatt cin.
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

4

27.02.2006, 15:35

Danke ich werd´s mal Probieren

Anonymous

unregistriert

5

27.02.2006, 15:44

DaRich
std::cin.get (); == get????
cin arbeitet wie scanf?

Wo lebst Du? Das sind 2 verschiedene Welten!

Das eine arbeitet über Inputbuffer das andere Bruteforce! Und cin schneidet nicht das Leerzeichen ab, sonder verschiebt es in die nächste Inputbuffer-Zeile, weshalb man danach den Inputbuffer neu synchronisieren muss.

riCo
Vergiss es! Damit kommst Du in keinem anständigen C++ Programm durch!

Faule Socke
Wie schon gesagt verschiebt std::cin nach der Eingabe eines Leerzeichens die darauffolgenden Informationen in die nächste Zeile des Inputbuffers.

Damit das "verrutschen" der Input daten nicht passiert gibt es die Funktion "getline".

Kann man so benutzen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>

int main (void)
{
    char buffer[64] = "";

    std::cout << "Dein Name lautet: ";
    std::cin.getline (buffer, 64);

    std::cout << buffer;

    return 0;
}

// bzw.


#include <iostream>
#include <string>

int main (void)
{
    std::basic_string<char> buffer;

    std::cout << "Dein Name lautet: ";
    std::getline (buffer);

    std::cout << buffer;

    return 0;
}


Aber versuch erst gar nicht den Müll von den beiden hier, das ist veraltester C-Quatsch und hat in einem C++ Programm nichts zu suchen. Nicht mal geschützt vor Pufferüberläufen sind die Dinger, absoluter stuss.

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

6

27.02.2006, 15:52

Zitat von »"nix da"«

DaRich
std::cin.get (); == get????
cin arbeitet wie scanf?

Wo lebst Du? Das sind 2 verschiedene Welten!

Das eine arbeitet über Inputbuffer das andere Bruteforce! Und cin schneidet nicht das Leerzeichen ab, sonder verschiebt es in die nächste Inputbuffer-Zeile, weshalb man danach den Inputbuffer neu synchronisieren muss.

riCo
Vergiss es! Damit kommst Du in keinem anständigen C++ Programm durch!

Faule Socke
Wie schon gesagt verschiebt std::cin nach der Eingabe eines Leerzeichens die darauffolgenden Informationen in die nächste Zeile des Inputbuffers.

Damit das "verrutschen" der Input daten nicht passiert gibt es die Funktion "getline".

Kann man so benutzen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>

int main (void)
{
    char buffer[64] = "";

    std::cout << "Dein Name lautet: ";
    std::cin.getline (buffer, 64);

    std::cout << buffer;

    return 0;
}

// bzw.


#include <iostream>
#include <string>

int main (void)
{
    std::basic_string<char> buffer;

    std::cout << "Dein Name lautet: ";
    std::getline (buffer);

    std::cout << buffer;

    return 0;
}


Aber versuch erst gar nicht den Müll von den beiden hier, das ist veraltester C-Quatsch und hat in einem C++ Programm nichts zu suchen. Nicht mal geschützt vor Pufferüberläufen sind die Dinger, absoluter stuss.


Danke!!!

Mal ganz davon halt ich nicht besonders viel von C. Hab keine guten sachen gehört.(Probleme bei Globalen Variablen und so)

DaRich

Frischling

Beiträge: 24

Wohnort: Ingolstadt

Beruf: Student

  • Private Nachricht senden

7

27.02.2006, 15:57

@ nix da

hab mich vielleicht etwas schwammig ausgedrückt, meinte lediglich:

benutze da cin.get() bzw. cin.getline(), wo du in C get() benutzt hast.
meinte eigentlich nicht die interne implementierung.
und mit leerzeichen abtrennen meinte ich nur scanf.

sry, falls daraus irgendein missverständnis enstanden sein sollte

@ Faule Socke

wenn du C++ programmierst, programmierst du ohne es vielleicht manchmal zu wissen C
>>> DaRich <<<

riCo

Treue Seele

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

8

27.02.2006, 16:04

nix da
Was ist den so schlechtes an getchar() ?
Das ist halt ne alte C Funktion, aber damit kannst du Bufferüberlauf usw verhindert. Klär mich mal auf was daran so schlecht ist, du scheinst mehr Ahnung als ich zu haben. ;-)
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

michamd

Frischling

Beiträge: 1

Wohnort: Magdeburg

Beruf: Schüler

  • Private Nachricht senden

9

10.03.2006, 19:05

hi

wenn ich einen string vom typ string habe, gibt er ja auch nur bis zum leerzeichen aus. wie bekomme ich es denn hier hin.

Werbeanzeige