Witajcie, dlaczego panu na youtube ten program oblicza dobrą sumę gdy int sum; nie ma dopisanego zera, a u mnie podaję nieprawidłowy wynik?
#include <stdio.h>
int main() {
int number, sum;
printf("Enter numbers to add (0 to stop): \n");
scanf("%d", &number);
while (number != 0) {
sum = sum + number;
scanf("%d", &number);
}
printf("Sum of numbers is: %d \n", sum);
return 0;
}
Ja zmieniłem tak dodając int sum = 0; i teraz działa. Ale dlaczego u niego nie występuje błąd?
#include <stdio.h>
int main() {
int number, sum = 0;
printf("Enter numbers to add (0 to stop): \n");
scanf("%d", &number);
while (number != 0) {
sum += number;
scanf("%d", &number);
}
printf("Sum of numbers is: %d \n", sum);
return 0;
}
To mówi Skynet:
W języku C, zmienne lokalne (takie jak sum w Twoim programie) nie są automatycznie inicjalizowane do zera. Ich wartość początkowa jest nieokreślona, co oznacza, że może zawierać dowolną wartość, która była wcześniej w tym miejscu w pamięci. To może prowadzić do nieprzewidywalnych wyników, gdy próbujesz używać takiej zmiennej przed jej zainicjowaniem.
Jeśli w innym kompilatorze program działał bez inicjalizacji sum, to może być kilka powodów:
Nieprzewidywalne zachowanie: W innym kompilatorze wartość sum mogła być przypadkowo ustawiona na 0 lub inną wartość, co sprawiło, że program działał poprawnie. To jednak nie jest gwarantowane i nie powinno być traktowane jako poprawne zachowanie.
Optymalizacje kompilatora: Różne kompilatory mogą stosować różne optymalizacje, które mogą wpływać na sposób, w jaki zmienne są inicjalizowane lub używane. W niektórych przypadkach kompilator może zainicjować zmienną do zera, ale to nie jest standardowe zachowanie.
Środowisko uruchomieniowe: Różne środowiska uruchomieniowe mogą mieć różne stany pamięci, co może wpływać na to, jakie wartości są dostępne w nieprzypisanych zmiennych.
Zaleca się zawsze inicjowanie zmiennych przed ich użyciem, aby uniknąć nieprzewidywalnych wyników i zapewnić, że program działa zgodnie z oczekiwaniami w każdym kompilatorze i środowisku.