Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Stringhe
Forum - C/C++ - Stringhe

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
Cesaruz (Normal User)
Pro


Messaggi: 83
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 16:43
Giovedì, 05/02/2009
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... 8-|
Grazie anticipatamente:k:

PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 17:01
Giovedì, 05/02/2009

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

  1. int i;
  2.     for(i =0;i<q;i++)
  3.     {
  4.         fflush(stdin);
  5.         printf("Inserire nome ");
  6.         gets(n[i]);
  7.         while(strcmp(n[i],"") == 0)
  8.         {
  9.             printf("Attenzione reinserire ");
  10.             gets(n[i]);
  11.         }
  12.     }



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 :)

PM Quote
Avatar
Cesaruz (Normal User)
Pro


Messaggi: 83
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 20:10
Giovedì, 05/02/2009
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++

  1. //Acquisisco i nomi delle squadre
  2. void AcquisisciNomiSquadre(int q)
  3. {
  4.         int i;
  5.         //char str[10];
  6.         for(i=0;i<q;i++){
  7.             fflush(stdin);
  8.                 printf("Inserire nome della squadra numero %d ", i+1);
  9.                 printf("-->");
  10.               gets(s[i]);
  11.                 printf("\nStringa appena acquisita %s ",s[i]);
  12.                 putchar('\n');
  13.                 while(strcmp(s[i],"")==0){
  14.                           putchar('\a');
  15.                           printf("Attenzione il nome non è stato inserito corretamente: SI PREGA DI REINSRIRE\n");
  16.                           gets(s[i]);
  17.                           //scanf("%s",s[i]);
  18.                       }
  19.         }
  20. }

:k:

Ultima modifica effettuata da Cesaruz il 05/02/2009 alle 20:14
PM Quote
Avatar
Overflow (Normal User)
Expert


Messaggi: 334
Iscritto: 11/01/2008

Segnala al moderatore
Postato alle 16:49
Venerdì, 06/02/2009
prova cosi:
Codice sorgente - presumibilmente C/C++

  1. //Acquisisco i nomi delle squadre
  2. void AcquisisciNomiSquadre(int q)
  3. {
  4.  int i;
  5.     //char str[10];
  6.     for(i=0;i<q;i++){
  7.             fflush(stdin);
  8.         printf("Inserire nome della squadra numero %d ", i+1);
  9.         printf("-->");
  10.           gets(s);
  11.             printf("\nStringa appena acquisita %s ",s);
  12.         putchar('\n');
  13.         while(strcmp(s,"")==0){
  14.                           putchar('\a');
  15.                           printf("Attenzione il nome non è stato inserito corretamente: SI PREGA DI REINSRIRE\n");
  16.                           gets(s);
  17.                           //scanf("%s",s[i]);
  18.                       }
  19.     }
  20. }


PM Quote
Avatar
Cesaruz (Normal User)
Pro


Messaggi: 83
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 19:07
Martedì, 10/02/2009
Mmmm..Non credo che funzioni perchè "s" è un vettore di stringhe...Cmq provo e ti faccio sapere:k:

PM Quote
Avatar
Cesaruz (Normal User)
Pro


Messaggi: 83
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 18:25
Mercoledì, 11/02/2009
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:

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 8:15
Venerdì, 13/02/2009
Scusa ma s dove e' dichiarato?

PM Quote
Avatar
Cesaruz (Normal User)
Pro


Messaggi: 83
Iscritto: 25/10/2007

Segnala al moderatore
Postato alle 12:13
Venerdì, 13/02/2009
s è un vettore di stringhe dichiarato globale...potrebbe essere per questo motivo??

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 14:05
Venerdì, 13/02/2009
Ci fai vedere come lo hai dichiarato ?

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo