|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#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 01:26. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2005
Messaggi: 3258
|
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jan 2020
Messaggi: 17
|
prima di tutto ti ringrazio
ho risolto il problema lo usavo per andare a capo |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Feb 2006
Messaggi: 134
|
goto no però!!! Non si può vedere
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12869
|
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 |
|
|
|
|
|
#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? |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12869
|
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: 00:26.




















