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

Liczby ujemne w konsoli

0 głosów
335 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 (90,350 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 (8,370 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ź 576 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez Doge Gaduła (3,420 p.)
0 głosów
1 odpowiedź 206 wizyt
pytanie zadane 13 kwietnia 2019 w C i C++ przez Fretkamaciejek Nowicjusz (190 p.)
0 głosów
1 odpowiedź 1,782 wizyt

93,762 zapytań

142,717 odpowiedzi

323,368 komentarzy

63,359 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...