Oppure

Loading
05/02/09 15:43
Cesaruz
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[i]);//Utilizzo un vettore di stringhe
while(strcmp(n[i],"";)==0){
printf("Attenzione reinserire";);
gets(s[i]);
}
}
-----------------------------
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... 8-|
Grazie anticipatamente:k:
aaa
05/02/09 16:01
gioser

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++

    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 :)
aaa
05/02/09 19:10
Cesaruz
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.
//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]);
                      }
	}
}

:k:
Ultima modifica effettuata da Cesaruz 05/02/09 19:14
aaa
06/02/09 15:49
Overflow
prova cosi:
//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]);
                      }
    } 
}
aaa
10/02/09 18:07
Cesaruz
Mmmm..Non credo che funzioni perchè "s" è un vettore di stringhe...Cmq provo e ti faccio sapere:k:
aaa
11/02/09 17:25
Cesaruz
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:k:
aaa
13/02/09 7:15
theprogrammer
Scusa ma s dove e' dichiarato?
aaa
13/02/09 11:13
Cesaruz
s è un vettore di stringhe dichiarato globale...potrebbe essere per questo motivo??
aaa