Dlaczego wychodzi mi inny wynik niż powinien?

0

Witam, zacząłem się niedawno uczyć C++ i szło całkiem nieźe, do momentu w którym "kurs" zabi mi ćwieka.
Mianowicie jeden program mimo, że przepisałem go kropka w kropkę, wypluwa mi inny wynik niż w kursie jest na screenie.
po zastosowaniu: CTRL + C, CTRL + V jest to samo.
Na wstępie kod programu:

 #include <iostream>

int main()
{
    int to_jest_zmienna;
    unsigned int tylkododatnie;
    
    float zmiennoprzecinkowa;
    
    char jeden_znak;
    unsigned char rowniez_znak;
    
    int abc = - 53;
    
    tylkododatnie = 22;
    zmiennoprzecinkowa = 12.42;
    rowniez_znak = 'c';
    
    std::cout << "Wypisujemy zmienne:" << std::endl;
    std::cout << "  to_jest_zmienna = " << to_jest_zmienna << std::endl;
    std::cout << "  tylkoDodatnie = " << tylkoDodatnie << std::endl;
    std::cout << "  abc = " << abc << std::endl;
    std::cout << "  zmiennoprzecinkowa = " << zmiennoprzecinkowa << std::endl;
    std::cout << "  jeden_znak = " << jeden_znak << std::endl;
    std::cout << "  rowniez_znak = " << rowniez_znak << std::endl;
    return 0;
} 

Wynik który powinien wyjść:

Wypisujemy zmienne:
to_jest_zmienna = 2293728
tylkoDodatnie = 22
abc = -53
zmiennoprzecinkowa = 12.42
jeden_znak =
rowniez_znak = c

Wynik który wychodzi u mnie:

Wypisujemy zmienne:
to_jest_zmienna = 1983779170
tylkoDodatnie = 22
abc = -53
zmiennoprzecinkowa =** 12**
jeden_znak = "
rowniez_znak = c

Jedyne co mi przychodzi na myśl to źle skonfigurowany kompilator.
W kursie autor używa Code::Blocks, więc używam tego samego.
Z góry dzięki wszystkim za pomoc.

1

Przy to_jest_zmienna obydwa wyniki są poprawne. W tej zmiennej w chwili wypisania jest to, co było na tym miejscu w pamięci przed wywołaniem funkcji main. Co do liczb zmiennoprzecinkowych, to pobaw się z setprecision. Pamiętaj o tym, jak wydaje Ci się, że kompilator ma błąd, to kompilator nie ma błędu (sprawdza się w 99 % przypadków).

0

Poza tym kompilator na pewno narzekał, że coś nie tak jest z tą zmienną.

0
Zjarek napisał(a)

Przy to_jest_zmienna obydwa wyniki są poprawne. W tej zmiennej w chwili wypisania jest to, co było na tym miejscu w pamięci przed wywołaniem funkcji main.

Ok ale skoro main stanowi początek programu, to skąd ww. zmienna jest brana? Nie wydaje mi się, żeby była losowa, bo za każdym uruchomieniem programu jest taka sama.

Zjarek napisał(a)

Co do liczb zmiennoprzecinkowych, to pobaw się z setprecision.

To na razie odpuszczam. Kosmetyką zajmę się jak będę więcej ogarniał.

MarekR22 napisał(a)

Poza tym kompilator na pewno narzekał, że coś nie tak jest z tą zmienną.

0 errors, 0 warnings (po zmianie "D" na "d" w tylkododatnie)

0

Wypisuje takie liczby ponieważ jest to tylko adres pamięci (nic tam nie masz wpisane)
Co do tej zmiennoprzecinkowej to ty może masz nowszy kompilator niż w tutorialu i w tym twoim z automatu nie przycina miejsc po przycinku.

U mnie w code block 10.05 wywala ostrzeżenie o użyciu nieprzypisanej zmiennej. A zmiennoprzecinkową pokazuje tak jak wpisałem 12.42 więc wszystko w porządku.

0

Ok ale skoro main stanowi początek programu, to skąd ww. zmienna jest brana?
znikąd. jest tam „to, co było na tym miejscu w pamięci przed wywołaniem funkcji main”.
Pamięć RAM istnieje cały czas, i w każdej jej komórce jest przez cały czas JAKAŚ wartość.
Jest nieistotne, skąd się biorą tam takie a nie inne wartości. Nikt ci tego tak naprawdę nie odpowie, bo u każdego to mogą być INNE wartości.

PS. zagadka:
user image
jaki to kompilator?

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