Cesaruz (Normal User)
Pro
Messaggi: 83
Iscritto: 25/10/2007
|
Ciao a tutti...in questi giorni sto lavorando con le stringhe e ho trovato difficoltà con alcuni controlli sull'acquisizione da tastiera...In pratica vorrei evitare che la stringa inserita dall'utente sia vuota e la vorrei far reinserire nel caso ciò accada...
Ora vi posto il codice che forse rende più facile la spiegazione del problema..
----------------------------
for(int i =0;i<q;i++){
printf("Inserire nome");
gets(n);//Utilizzo un vettore di stringhe
while(strcmp(n,"")==0){
printf("Attenzione reinserire");
gets(s);
}
}
-----------------------------
questo è ciò che faccio quindi la prima volta che entro in questo ciclo entra direttamente nel while senza che io inserisca niente...
Quindi io voglio acquisire delle stringhe e controllare che l'utente inserisca almeno un carattere...
Spero di essere stato chiaro...
Grazie anticipatamente
|
|
gioser (Normal User)
Pro
Messaggi: 111
Iscritto: 03/10/2008
|
dipende dal fatto che prima del codice postato fai degli input che lasciano nel buffer un \n
pulisci il buffer con una fflush(stdin)
inoltre in C ANSI standard non si possono dichiarare le variabili all'interno di un ciclo for. Si puo' fare solo in C++
Codice sorgente - presumibilmente C/C++ |
int i;
for(i =0;i<q;i++)
{
fflush(stdin);
printf("Inserire nome ");
gets(n[i]);
while(strcmp(n[i],"") == 0)
{
printf("Attenzione reinserire ");
gets(n[i]);
}
}
|
Per la prossima volta posta il tuo sorgente in un blocco di codice usando il pulsante "Code".
Altrimenti, come vedi dal tuo post, vengono persi dei caratteri, come gli indici i tra parentesi quadre.
Ciao
|
|
Cesaruz (Normal User)
Pro
Messaggi: 83
Iscritto: 25/10/2007
|
Ok grazie solo non era per il buffer... comunque ora ti metto il codice come mia hai consigliato...
senti ora però sarebbe utile sapere come fare lo stesso controllo su tutti gli input, anche per esempio sui reali o sugli interi... come potrei fare???
Grazie anticipatamente.
Codice sorgente - presumibilmente C/C++ |
//Acquisisco i nomi delle squadre
void AcquisisciNomiSquadre(int q)
{
int i;
//char str[10];
for(i=0;i<q;i++){
fflush(stdin);
printf("Inserire nome della squadra numero %d ", i+1);
printf("-->");
gets(s[i]);
printf("\nStringa appena acquisita %s ",s[i]);
putchar('\n');
while(strcmp(s[i],"")==0){
putchar('\a');
printf("Attenzione il nome non è stato inserito corretamente: SI PREGA DI REINSRIRE\n");
gets(s[i]);
//scanf("%s",s[i]);
}
}
}
|
Ultima modifica effettuata da Cesaruz il 05/02/2009 alle 20:14 |
|
Overflow (Normal User)
Expert
Messaggi: 334
Iscritto: 11/01/2008
|
prova cosi:
Codice sorgente - presumibilmente C/C++ |
//Acquisisco i nomi delle squadre
void AcquisisciNomiSquadre(int q)
{
int i;
//char str[10];
for(i=0;i<q;i++){
fflush(stdin);
printf("Inserire nome della squadra numero %d ", i+1);
printf("-->");
gets(s);
printf("\nStringa appena acquisita %s ",s);
putchar('\n');
while(strcmp(s,"")==0){
putchar('\a');
printf("Attenzione il nome non è stato inserito corretamente: SI PREGA DI REINSRIRE\n");
gets(s);
//scanf("%s",s[i]);
}
}
}
|
|
|
Cesaruz (Normal User)
Pro
Messaggi: 83
Iscritto: 25/10/2007
|
Mmmm..Non credo che funzioni perchè "s" è un vettore di stringhe...Cmq provo e ti faccio sapere
|
|
Cesaruz (Normal User)
Pro
Messaggi: 83
Iscritto: 25/10/2007
|
Senti ho provato e non funziona come posso fare??
Al massimo c'è un funzione o un metodo che mi permette di acquisire in modo adeguato le stringhe??
Grazie anticipatamente
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Scusa ma s dove e' dichiarato?
|
|
Cesaruz (Normal User)
Pro
Messaggi: 83
Iscritto: 25/10/2007
|
s è un vettore di stringhe dichiarato globale...potrebbe essere per questo motivo??
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Ci fai vedere come lo hai dichiarato ?
|
|