Indeciso su cosa concentrare la mia futura carriera

Pubblicità
Sempre inizializzarle, sempre, mai assumere che siano zero.
Esatto, sempre inizializzare quando allochi le variabili nello stack, perche conterranno valori random. MA nota che se globali (o static) sono inizializzate a 0 dallo std C, sempre. Una variablie globale tipo

static int pippo = 0;

in alcune community viene bloccato, come non necessario, e ti fanno togliere " = 0" considerato codice inutile. Mentre nello stack, come dice @Andretti60 sempre metterle a un valore iniziale. Sai cosa inrendo per stack e scope ? Terminologie fondamentali da imparare.



Non male come codice iniziale, nota iuna cosa, in C std, le variabili dovrebbero essere allocate tutte e solo a inizio scope, non qua e la nel codice. gcc recente non segnale l'errore perche' lo consente, ma in C si mettono tutte le variabili a inizio scope. Il poterle dichiarare dove vuoi fu un improvement di c++ e accettato ora da gcc, ma vietato in molte community per questioni di portabilita'.
 
@Hero467 ho guardato il tuo codice. A parte il missing break (che hai trovato) ci sono altri due errori. Il primo è che usi una variabile (sum) non inizializzata. È una cosa da evitare come la peste, in certi linguaggi viene considerato un errore di compilazione. Sempre inizializzarle, sempre, mai assumere che siano zero.
Il secondo è che fai uso sempre di variabili di tipo intero. Quando usi una variabile accumulatore (sum, nel tuo caso) c’è il pericolo che possa andare in overflow. Quando fai una divisione (come nel tuo caso per calcolare la media), mai usare un intero, in quanto non hai controllo su come il risultato sia approssimato (troncamento? Approssimazione?), sempre usate variabili a virgola mobile)
Grazie della pazienza, correggo subito. A usare un double avrei dovuto pensarci subito, ma programmare di fretta non porta mai a cose buone.

Il problema che riscontri è uno dei problemi principali del linguaggio C, ossia il I/O formattato, che è scritto (mi spiace dirlo) proprio con i piedi. Lo scanf() non viene ignorato, come dici tu, semplicemente quella istruzione mette nella variabile specificata il primo carattere del buffer di ingresso (in quanto usi per la lettura il formato %c), e nel tuo caso è il carattere di ritorno che hai usato per inserire l’ultimo numero della serie, in quanto lo scanf() non lo rimuove dal buffer di input. Quello che hai scritto dunque non è sbagliato, semplicemente che non conoscendo i dettagli del linguaggio non sapevi di questa peculiarità.
Personalmente, non uso mai scanf() in C, per leggere la tastiera uso sempre e solo gets() in modo da leggere tutta la linea, da cui poi prendo i “pezzi” che mi interessano, facendo le conversioni usando sscanf(). È più lavoro (ma non troppo) ma sono in controllo di quello che leggo, e posso più facilmente controllare gli errori di conversione.
Perdona la mia ignoranza, ma non ho capito un accidenti?
Riesci a rispiegarmelo un pochino più semplicemente?
--- i due messaggi sono stati uniti ---
Esatto, sempre inizializzare quando allochi le variabili nello stack, perche conterranno valori random. MA nota che se globali (o static) sono inizializzate a 0 dallo std C, sempre.
Ottimo, ho imparato una cosa nuova :D

Sai cosa inrendo per stack e scope ? Terminologie fondamentali da imparare.
No, ma rimedio subito
Non male come codice iniziale, nota iuna cosa, in C std, le variabili dovrebbero essere allocate tutte e solo a inizio scope, non qua e la nel codice. gcc recente non segnale l'errore perche' lo consente, ma in C si mettono tutte le variabili a inizio scope. Il poterle dichiarare dove vuoi fu un improvement di c++ e accettato ora da gcc, ma vietato in molte community per questioni di portabilita'.
Ottimo, adesso correggo subito.
Comunque non è meglio creare un nuovo post per questo? Se no rischiamo di andare tanto off-topic
 
Pubblicità
Pubblicità
Indietro
Top