Konsola wyświetla uszkodzony tekst (cout << "tekst"...)

0

Witam,
Zacząłem pisać prosty mini-program (mający w założeniu skryptem dialogu zawierającym elementy losowości oraz uwzględniającym wpływ naszych decyzji na prawdopodobieństwo w "losowaniach"- gdyby ktoś był ciekawy co to za potworek :) ) dla przećwiczenia tego czego już się nauczyłem i ew. implementowania tego czego nauczę się w przyszłośc, gdy nagle pojawił się ten, dość banalny problem. Mianowicie problem dotyczy tego że przy poleceniu " cout<< "empatia:"<<empatia<< endl;", przy wyświetleniu słowa "empatia" na konsoli część liter zastępowana jest przez ciągi cyfr (jak na załączonym obrazku). Na początku pomyślałem że to wina kompilera ale okazuje się że na internetowym C++ Shellu, sprawa wygląda tak samo. Nie wygląda to na problem nie do obejścia, natomiast zdumiewa mnie sama jego natura ponieważ nie rozumiem w jaki sposób cokolwiek może tak mutować tekst (pozbawiony oczywiście polskich znaków)
Dzięki!

Cały kod:

#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
using namespace std;
string txt1[3];
int t1, t2, t3, t4;
int an1, anwt;
int empatia = 100, ciekawosc = 100;

int main()

{
    txt1[1] = "Henlooou";
    txt1[2] = "Henlo";

    srand(time(0));
    anwt = rand() % 2000 + 2000;
    t1 = rand() % 2 + 1;

    ;

    cout << "WELCOME TO THE FRIENDLY BIRD (OvO)" << endl;
    cout << endl;
    cout << "   -" << txt1[t1] << endl;
    cout << endl;

    cout << "1. hello     " << endl;
    cout << "2. henlo    " << endl;
    cout << "3. hello stupid birb" << endl;

    cin >> an1;

    if (an1 == 1) {
    };
    if (an1 == 2) {
        empatia = empatia + 20;
        ciekawosc = ciekawosc + 50;
    };
    if (an1 == 3) {
        empatia = empatia - 100;
    };

    if (an1 == 3) {
        Sleep(anwt);
        cout << "Heck off!" << endl;
        return 0;
    }

    cout <<

        cout << "empatia:" << empatia << endl;
    cout << "ciekawosc:" << ciekawosc << endl;

    return 0;
}
4
    cout <<

        cout << "empatia:" << empatia << endl;

Wystarczy trochę przyłożyć się do pisanego kodu, a nie pisać na oślep.

W nowszych wersjach C++ (technicznie od C++11, ale biblioteka standardowa i kompilator muszą wspierać ten standard na odpowiednim poziomie) to nie przejdzie - wywołujesz tutaj konwersję cout do void*, która była obejściem braku explicit operatorów, a konkretnie operatora bool. Tak więc gdy masz wersję biblioteki standardowej, która ma operator void*() const zamiast explicit operator bool() const, to powyższe wywołanie jest poprawne.

https://en.cppreference.com/w/cpp/io/basic_ios/operator_bool

0
Jerzy44 napisał(a):

Na początku pomyślałem że to wina kompilera ale okazuje się że na internetowym C++ Shellu, sprawa wygląda tak samo.

Tak oczywiście, że newbie ma szanse znaleźć błąd kompilatora, którego tysiące doświadczonych ludzi nie było w stanie zauważyć.


A co do samego tematu. Po poprawianiu kodu by się kompilował i uruchomieniu nie rozumiem, czego oczekujesz, żeby się wyświetliło i co ci się źle wyświetla. https://repl.it/repls/ShockedMarriedDebuggers
0

Przy okazji znalazłem trochę JavaScriptu w C++:

cout << cout;

wynik: 0

cout << !cout;

wynik: 0

Edit: jednak nie: http://cpp.sh/5vfll

Test 1
0x600e08
Test 2
0

1 użytkowników online, w tym zalogowanych: 0, gości: 1