|
|
|
|
Strumenti |
22-01-2020, 00:20 | #1 |
Junior Member
Iscritto dal: Jan 2020
Messaggi: 17
|
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); 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"); } Ultima modifica di 9abs : 22-01-2020 alle 00:26. |
22-01-2020, 07:22 | #2 |
Senior Member
Iscritto dal: Apr 2005
Messaggi: 2990
|
|
22-01-2020, 11:51 | #3 |
Junior Member
Iscritto dal: Jan 2020
Messaggi: 17
|
prima di tutto ti ringrazio
ho risolto il problema lo usavo per andare a capo |
23-01-2020, 19:16 | #4 |
Member
Iscritto dal: Feb 2006
Messaggi: 134
|
goto no però!!! Non si può vedere
|
25-01-2020, 19:00 | #5 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12580
|
Consiglio: se usi il tag CODE del forum la lettura del codice è più facile:
Codice:
#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"); } 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: Codice:
if(bol=0); printf("\nnon è stato trovato nessun elemento\n"); 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 . 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: Codice:
if (0) 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 . Ad esempio: Codice:
gcc -Wall -Wextra miofile.c -o mioprogramma |
06-02-2020, 00:57 | #6 |
Junior Member
Iscritto dal: Jan 2020
Messaggi: 17
|
GRAZIE INFINITE!!
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? |
07-02-2020, 08:38 | #7 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12580
|
Non lo eliminerei, magari può servire a qualcun altro. Non so se sia il caso di marcarlo come [RISOLTO] .
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:20.