View Full Version : AIUTO SCANF codice C (problema di un principiante)
Vi ringrazio subito per l'attenzione, sono nuovo nel forum e sto cercando di ambientarmi.
Ho riscontrato più volte questo problema con la scanf() in più codici.
Nonostante si scritta una sola volta nel codice, nell'esecuzione viene chiamata 1 volta in più e non so davvero quale possa essere il problema vista la mia poca esperienza..
Il codice più corto in cui l ho riscontrato:
#include <stdio.h>
#define dim 10
int vet[dim]={0,2,4,6,8,10,12,14,16,18};
//cercare se presente un elemento all interno dell array
int main(){
int i,ele;
int bol=0;
printf("dammi un numero e controllo se c'è nell elenco\n");
scanf("%d\n",&ele); :cry:
for(i=0;i<10;i++)
{
if(ele==vet[i]){
bol=1;
printf("\nè presente\n");
goto fine;
}
}
if(bol=0);
printf("\nnon è stato trovato nessun elemento\n");
fine: printf("\nfine\n");
}
scanf("%d\n",&ele); :cry:
Scusa ma perchè quel \n ???
Toglilo e risolvi il problema
prima di tutto ti ringrazio
ho risolto il problema :D
lo usavo per andare a capo :(
Volutomitra
23-01-2020, 20:16
goto no però!!! Non si può vedere :doh:
Consiglio: se usi il tag CODE del forum la lettura del codice è più facile:
#include <stdio.h>
#define dim 10
int vet[dim]={0,2,4,6,8,10,12,14,16,18};
//cercare se presente un elemento all interno dell array
int main(){
int i,ele;
int bol=0;
printf("dammi un numero e controllo se c'è nell elenco\n");
scanf("%d\n",&ele);
for(i=0;i<10;i++)
{
if(ele==vet[i]){
bol=1;
printf("\nè presente\n");
goto fine;
}
}
if(bol=0);
printf("\nnon è stato trovato nessun elemento\n");
fine: printf("\nfine\n");
}
Dopodiché vedo altri problemi oltre a quello segnalato da Kaya.
1) Come ti è stato già detto l'uso del goto in generale è sconsigliato, diciamo che se vuoi interrompere il ciclo prima puoi usare la parola chiave "break".
2) scrivere:
if(bol=0);
printf("\nnon è stato trovato nessun elemento\n");
a meno che sia stato scritto appositamente, induce in errore perché non fa quello che pensi, per due motivi.
a) il punto e virgola alla fine dell'if di fatto annulla l'effetto dell'if, pensa che non me ne ero neanche accorto in prima battuta :D.
b) anche se togli il punto e virgola, l'operatore di confronto in C è il doppio uguale (==), come hai giustamente usato nel ciclo for, mentre il singolo uguale (=) è l'operatore di assegnamento.
In C ogni espressione ha un valore ed un effetto. In particolare (bol=0) ha come effetto l'assegnamento di 0 alla variabile bol, e il valore in questo caso è proprio il valore assegnato, quindi 0.
Il risultato è che l'espressione che hai scritto equivale a:
if (0)
Quindi il corpo dell'if non sarebbe mai eseguito, perché la condizione sarebbe sempre falsa (0). Se togli il punto e virgola ti accorgerai che quella printf() non viene mai eseguita.
Aggiungo che, come regole di stile sarebbe meglio indentare sempre il codice ad ogni blocco (cioè le righe di codice racchiuse tra due parentesi graffe), e spaziare un po' meglio.
PS: non so che compilatore stai usando, ma in generale sarebbe meglio attivare i warning perché ti rilevano tutti gli errori che ti ho segnalato :D.
Ad esempio:
gcc -Wall -Wextra miofile.c -o mioprogramma
Grazie per i consigli.
Sono stati utilissimi, cercherò di migliorare!
Come compilatore uso terminale di ubuntu ed editor di testo.
Provo subito i comandi consigliati.
Mi consigliate di eliminare il post per ordine nel forum?
Non lo eliminerei, magari può servire a qualcun altro. Non so se sia il caso di marcarlo come [RISOLTO] :D.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.