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

vab

Frischling

  • »vab« ist der Autor dieses Themas

Beiträge: 18

Wohnort: Hamburg

Beruf: Kfz-Meister

  • Private Nachricht senden

1

07.02.2012, 16:17

Unterschied zwischen cout und printf

Hallo zusammen,
meine Frage ist, warum macht cout und printf unterschiede in der Ausgabe ? Normalerweise ist es doch ein und dasselbe .... oder ??

printf( " \n Ausgang : %d ", pos); // Ausgabe des Ausgang.. ist richtig !
cout << " \n Ausgang : " << pos; // Ausgabe des Ausgang.. ????? keine Ausage

Habe mal die Zeilen vom Programm die " Ärger " machen hier aufgelistet.

Danke im voraus für Antwort.



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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>

using namespace std;

int main()
    {
    int w1, w2, w3, w4;
    char pos;
    int kugeln;

    cout << " \n\n\n Bitte Anfangsweichenstellung der 1. Weiche ein : ";
    cin >> w1;
    cout << " Bitte Anfangsweichenstellung der 2. Weiche ein : ";
    cin >> w2;
    cout << " Bitte Anfangsweichenstellung der 3. Weiche ein : ";
    cin >> w3;
    cout << " Bitte Anfangsweichenstellung der 4. Weiche ein : ";
    cin >> w4;

    cout << " \n Bitte geben Sie die Anzahl der Kugeln ein : ";
    cin >> kugeln;
    
    for( ; kugeln > 0; kugeln = kugeln - 1)
        {
        if( w1 == 1)
            pos = 1;
        else 
            pos = 2;
            w1 = 1 - w1;
        if( pos == 1)
            {
            if( w2 == 1)
                pos = 4;
            else
                pos = 3;
            w2 = 1 - w2;
            }
        else
            {
            if( w3 == 1)
                pos = 3;
            else
                pos = 5;
            w3 = 1 - w3;
            }
        if( pos == 3)
            {
            if( w4 == 1)
                pos = 4;
            else
                pos = 5;
            w4 = 1 - w4;
            }
        printf( " \n Ausgang : %d ", pos);  // Ausgabe des Ausgang.. ist richtig !
        cout << " \n Ausgang : " << pos;    // Ausgabe des Ausgang.. ????? keine Ausage

        cout << " \n\n neue Weichenstellung : " << w1 << " " << w2 << " " << w3 << " " << w4 << endl;
        cout << " \n\n\n ";
        }
 
    }

[cpp]
[/cpp]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

07.02.2012, 16:19

printf() kommt aus C. Verwend in C++ cout. Grund: Typsicherheit.

Die unterschiedliche Ausgabe kommt daher dass pos ein char ist.
Da siehst du genau das oben erwähnte Problem mit printf(): printf() hört nur auf das was im Format String steht ("%d") und ignoriert völlig um was es sich beim übergebenen Wert tatsächlich handelt (char). Mit cout kann das nicht passieren.
Wenn du mit cout einen int ausgeben willst, dann muss es auch tatsächlich ein int sein. Also mach pos zu einem int oder wandel es bei der Ausgabe in einen int um: static_cast<int>(pos).

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (07.02.2012, 16:25)


BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

3

07.02.2012, 16:21

*hat sich erledigt.*

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

4

07.02.2012, 17:02

char wird von cout automatisch als Zeichen interpretiert. Caste es mit static_cast<int>(pos) und es funktioniert.

edit: da öffnet man einen Thread, lässt sich von der Freundin 40 Minuten zulabern und hat dann sowas -.-
"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