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++ - verificare se non è stato inserito niente ?
Forum - C/C++ - verificare se non è stato inserito niente ?

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 11:42
Venerdì, 24/08/2012
Come vedete dal titolo, voglio riuscire a fare in modo che, se l'utente non mi inserisce niente, cioè non scrive niente e spinge subito invio, mi compaia un messaggio di errore.

Io ho provato a fare così:
Codice sorgente - presumibilmente C/C++

  1. for(i = 0;
  2.        (fnp[i] != '\0');
  3.        i++)
  4.        if(fnp[0] == '\n')
  5.          /*messaggio di errore in caso di violazioni delle regole*/



ma non mi funziona; perchè ?

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 12:01
Venerdì, 24/08/2012
Ciao!

Come hai dichiarato fnp?

In che modo, domandi fnp all' utente?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 17:40
Venerdì, 24/08/2012
Se chiedi all'utente una stringa e vuoi gestire il caso in cui abbia inserito "" (niente) puoi risolvere in questo modo:
Codice sorgente - presumibilmente C++

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. int main(){
  6.     /*
  7.       char *sInput = NULL;
  8.       sInput = (char *)malloc(sizeof(char)*50);
  9.      */
  10.     char sInput[50];
  11.    
  12.     printf("Inserisci stringa:");
  13.     gets(sInput);
  14.  
  15.     if(!strcmp(sInput,"")) // { "" != " " }
  16.         printf("Non hai inserito niente\n");
  17.  
  18.     printf("%s",sInput);
  19.     //free(sInput);
  20.     return 0;
  21. }



oppure:
Codice sorgente - presumibilmente C++

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. char *sInput = NULL;
  6.  
  7. int main(){
  8.         char sTmp[30];
  9.  
  10.         printf("Inserisci stringa:\n");
  11.         gets(sTmp);
  12.        
  13.         //In questo modo verrà allocata soltanto la memoria necessaria
  14.         sInput = (char *)malloc(sizeof(char)*strlen(sTmp+1));
  15.         strcpy(sInput,sTmp);
  16.  
  17.         if(!strcmp(sInput,"")){
  18.                 printf("Non hai inserito niente");
  19.         }else{
  20.                 printf("%s",sInput);
  21.         }
  22.  
  23.         free(sInput);
  24.         getchar();
  25.         return 0;
  26. }



EDIT:Non avevo inizializzato correttamente la variabile

Ultima modifica effettuata da il 11/08/2013 alle 13:09
PM Quote
Avatar
carlduke (Member)
Pro


Messaggi: 153
Iscritto: 29/01/2011

Segnala al moderatore
Postato alle 12:53
Sabato, 25/08/2012
Testo quotato



Se chiedi all'utente una stringa e vuoi gestire il caso in cui abbia inserito "NIENTE" ---> "" puoi risolvere in questo modo:
Codice sorgente - presumibilmente C/C++

  1. #include<stdio.h>
  2.  
  3. int main(){
  4.     char *sInput;
  5.  
  6.     printf("Inserisci stringa:");
  7.     gets(sInput);
  8.  
  9.     if(!strcmp(sInput,"")) // { "" != " " }
  10.         printf("Non hai inserito niente\n");
  11.  
  12.     printf("%s",sInput);
  13.     return 0;
  14. }



Tuttavia, questo metodo funziona solo nel caso in cui venga utilizzata la funzione
Codice sorgente - presumibilmente Plain Text

  1. gets(str);



Infatti, se utilizzi :
Codice sorgente - presumibilmente Plain Text

  1. scanf("%s",sInput);


L'utente non potrà non inserire niente




ma in questo modo andra' in segmentation fault, dato che sInput non e' inizializzato.. dichiaralo come array (char sInput[qualche dimensione])


Ultima modifica effettuata da pierotofy il 23/08/2013 alle 16:15
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 14:59
Sabato, 25/08/2012
EDIT:Non avevo inizializzato correttamente la variabile

Potrebbe andare in segmentation fault (non avevo allocato la memoria). Quindi:
Codice sorgente - presumibilmente C/C++

  1. char *sInput = NULL;
  2. sInput = (char *)malloc(sizeof(char)*50);



Comunque con :
Codice sorgente - presumibilmente C/C++

  1. char *sInput[dimensione];



Dichiari un vettore di puntatori, quindi potrebbe rappresentare un vettore di stringhe, ma non credo che abbia bisogno di questo

Ultima modifica effettuata da il 11/08/2013 alle 13:21
PM Quote
Avatar
carlduke (Member)
Pro


Messaggi: 153
Iscritto: 29/01/2011

Segnala al moderatore
Postato alle 19:50
Sabato, 25/08/2012
Testo quotato



Potrebbe andare in segmetation fault. Comunque si, è sempre meglio inizializzarla:
Codice sorgente - presumibilmente C/C++

  1. char *sInput = NULL;



Comunque con :

Codice sorgente - presumibilmente C/C++

  1. char *sInput[dimensione];



Dichiari un vettore di puntatori, quindi potrebbe rappresentare un vettore di stringhe, ma non credo che abbia bisogno di questo



Nonono.

sia dichiarando char *sInput, che char *sInput = NULL il programma crashera', questo perche' nel primo caso (char *sInput) si andra' a scrivere su un indirizzo di memoria casuale, mentre nel secondo caso su un indirizzo di memoria nullo.
Per evitare questo, sInput va dichiarata come array di char (il mio "char *sInput[qualche dimesione] e' stato un errore di battitura) , abbastanza capiente da contenere la riga in input, (per esempio char sInput[80]).

Dichiarando come array di char, quindi con dimensione costante, sullo stack verra' riservata abbastanza memeria da contenere 80 caratteri.
Se la stringa invece viene dichiarata come puntatore, bisogna allocare dinamicamente la memoria (quindi fare uso di malloc, e free).

Ultima modifica effettuata da pierotofy il 23/08/2013 alle 16:16
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 19:53
Sabato, 25/08/2012
EDIT:Non avevo inizializzato correttamente la variabile

Ultima modifica effettuata da il 12/08/2013 alle 12:53
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 20:06
Sabato, 25/08/2012
Hai ragione (non avevo inizializzato correttamente la variabile)

Ultima modifica effettuata da il 11/08/2013 alle 13:08
PM Quote
Avatar
carlduke (Member)
Pro


Messaggi: 153
Iscritto: 29/01/2011

Segnala al moderatore
Postato alle 20:26
Sabato, 25/08/2012
Testo quotato



Hai ragione inizializzando a NULL -> crash.

Ma non con:
Codice sorgente - presumibilmente C/C++

  1. char *sInput;





anche cosi :k:

Ultima modifica effettuata da pierotofy il 23/08/2013 alle 16:16
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo