PDA

View Full Version : Code Blocks problema con il printf? Sono nuovo nella programmazione


Alberto5
19-03-2019, 19:30
Buonasera,
Ho un semplice problema(credo) con codeblocks. Da qualche giorno ho iniziato a programmare e sto usando il compilatore code blocks per programmare in C. dopo aver finito di compilare il mio esercizio(molto semplice) che vi riporterņ di seguito, il compilatore mi stampa sempre i stessi valori.
Questo č il codice:

#include <stdio.h>
#include <stdlib.h>


//Esercizi 3.3

int main(){
int x;
int y;
int z= x + y;

printf("assegnare un valore a x: %d\n", x);
scanf("%d", &x);

printf("assegnare un valore a y: %d\n", y);
scanf("%d", &y);

printf("La somma di x e y e': %d\n", z);

printf("%d", z);
return 0;

}

Il risultato stampato č questo:
assegnare un valore a x: 8
31
assegnare un valore a y: 96
32
La somma di x e y e': 104
104
Process returned 0 (0x0) execution time : 3.444 s
Press any key to continue.


8 e 96 sono i valori che mi mette sempre lui, senza averli inseriti. Mentre 31 e 32 sono i valori in input che ho inserito. Se prendo il progetto e lo sposto in un'altra cartella del pc, questi valori cambiano. come mai? Spero di essere stato chiaro nell'esporre il problema.

jepessen
19-03-2019, 19:40
Crei le variabili x ed y senza inizializzazione. Se non sono inizializzate possono avere un qualsiasi valore.. Di regola occorre sempre inizializzare le variabili, come ad esempio

int x = 0;
int* px = NULL;

Il problema e' che tu non solo non le inizializzi, ma le utilizzi prima di assegnarli un valore, quindi il loro contenuto e', per cosi' dire casuale.

Proprio per evitare problemi del genere alcuni compilatori quando compilano in debug settano dei valori di default pari a 0, ma in release non lo fanno perche' per ragioni di prestazioni dovrebbe essere fatto direttamente dal programmatore, che sa se quei valori vengono utilizzati prima di una loro inizializzazione.

E se proprio devo dirla tutta, I compilatori dovrebbero avvisare se una variabile viene utilizzata prima della sua inizializzazione. Ad esempio il seguente codice


#include <iostream>

int main() {
int i;
std::cout << "i = " << i << std::endl;
return 0;
}

Compilato con Visual Studio mi da il seguente warning:

ConsoleApplication1.cpp(9): error C4700: uninitialized local variable 'i' used

Ora il mio codice e' C++ e non C ma il concetto e' lo stesso, utilizzare variabili prima di inizializzarle e' considerato errore.