• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Liczby ujemne w konsoli

Object Storage Arubacloud
0 głosów
107 wizyt
pytanie zadane 30 listopada 2022 w C i C++ przez Janchess Początkujący (480 p.)
Dlaczego po skompilowaniu i uruchomieniu pokazują mi się liczby ujemne w konsoli ?

#include <stdio.h>
#define N 5

int main() {
    int tab[N] = { 4, 5, 1, 3, 2 };
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            if (tab[j] > tab[j+1]) {
                int z;
                z = tab[j];
                tab[j] = tab[j+1];
                tab[j+1] = tab[j];
            }
        }
    }
    for (int i = 0; i < N; i++) {
        printf("%d", tab[i]);
    }
    return 0;
}
1
komentarz 30 listopada 2022 przez SzkolnyAdmin Szeryf (86,360 p.)
Po co zmienna z, której nie używasz (do zamiany elementów miała chyba być stosowana)?
Twój algorytm sortowania ma błędy.
komentarz 30 listopada 2022 przez Janchess Początkujący (480 p.)
Faktycznie, zrobiłem to omyłkowo.
komentarz 30 listopada 2022 przez Janchess Początkujący (480 p.)

@SzkolnyAdmin, Po poprawce nadal występuje ten sam błąd. Wyświetla mi się "komunikat Stack around the variable 'tab' was corrupted", ale pomimo tego, konsola się uruchamia. Co robię nie tak ?

1 odpowiedź

+1 głos
odpowiedź 30 listopada 2022 przez toko Dyskutant (7,670 p.)
edycja 30 listopada 2022 przez toko

Cóż, błędem przez który ukazują się liczby ujemne jest druga pętla for, w której iterujesz się do N-1(ostatniego indeksu tablicy), a potem odwołujesz się do indeksu j+1. To powoduje odczytanie losowej wartości z pamięci, która widocznie akurat jest ujemna. Trzeba zmniejszyś zakres o 1. Drugim błędem jest zamiana elementów, powinieneś użyć zmiennej z w drugim przypisaniu, bo inaczej nadpisujesz sobie zmienną i potem ją używasz.

 #include <stdio.h>
#define N 5

int main() {
    int tab[N] = { 4, 5, 1, 3, 2 };
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N-1; j++) {
            if (tab[j] > tab[j+1]) {
                int z;
                z = tab[j];
                tab[j] = tab[j+1];
                tab[j+1] = z;
            }
        }
    }
    for (int i = 0; i < N; i++) {
        printf("%d", tab[i]);
    }
    return 0;
}

Wydaje mi się, że w takiej postaci już powinno działać.

komentarz 30 listopada 2022 przez Janchess Początkujący (480 p.)
Dziękuje, już zrozumiałem w czym rzecz :) Miłego wieczoru.

Podobne pytania

0 głosów
1 odpowiedź 272 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez Doge Gaduła (3,370 p.)
0 głosów
1 odpowiedź 113 wizyt
pytanie zadane 13 kwietnia 2019 w C i C++ przez Fretkamaciejek Nowicjusz (190 p.)
0 głosów
1 odpowiedź 1,255 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...