Oppure

Loading
24/08/12 9:42
Dice
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ì:
for(i = 0;
       (fnp[i] != '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ì:
for(i = 0;
       (fnp[i] != '{parsed_message}');
       i++) 
       if(fnp[0] == '\n')
	 /*messaggio di errore in caso di violazioni delle regole*/


ma non mi funziona; perchè ?'); i++) if(fnp[0] == '\n') /*messaggio di errore in caso di violazioni delle regole*/


ma non mi funziona; perchè ?
aaa
24/08/12 10:01
Poggi Marco
Ciao!

Come hai dichiarato fnp?

In che modo, domandi fnp all' utente?
aaa
24/08/12 15:40
Se chiedi all'utente una stringa e vuoi gestire il caso in cui abbia inserito "" (niente) puoi risolvere in questo modo:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(){
    /*
      char *sInput = NULL;
      sInput = (char *)malloc(sizeof(char)*50);
     */
    char sInput[50];
    
    printf("Inserisci stringa:");
    gets(sInput);
 
    if(!strcmp(sInput,"")) // { "" != " " }
        printf("Non hai inserito niente\n");
 
    printf("%s",sInput);
    //free(sInput);
    return 0;
}


oppure:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char *sInput = NULL;

int main(){
	char sTmp[30];

	printf("Inserisci stringa:\n");
	gets(sTmp);
        
        //In questo modo verrà allocata soltanto la memoria necessaria
	sInput = (char *)malloc(sizeof(char)*strlen(sTmp+1));
	strcpy(sInput,sTmp);

	if(!strcmp(sInput,"")){
		printf("Non hai inserito niente");
	}else{
		printf("%s",sInput);
	}

	free(sInput);
	getchar();
	return 0;
}


EDIT:Non avevo inizializzato correttamente la variabile
Ultima modifica effettuata da 11/08/13 11:09
25/08/12 10:53
carlduke
Se chiedi all'utente una stringa e vuoi gestire il caso in cui abbia inserito "NIENTE" ---> "" puoi risolvere in questo modo:
#include<stdio.h>

int main(){
    char *sInput;

    printf("Inserisci stringa:");
    gets(sInput);

    if(!strcmp(sInput,"")) // { "" != " " }
        printf("Non hai inserito niente\n");

    printf("%s",sInput);
    return 0;
}


Tuttavia, questo metodo funziona solo nel caso in cui venga utilizzata la funzione
gets(str);


Infatti, se utilizzi :
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 23/08/13 14:15
aaa
25/08/12 12:59
EDIT:Non avevo inizializzato correttamente la variabile

Potrebbe andare in segmentation fault (non avevo allocato la memoria). Quindi:
char *sInput = NULL;
sInput = (char *)malloc(sizeof(char)*50);


Comunque con :
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 11/08/13 11:21
25/08/12 17:50
carlduke
Potrebbe andare in segmetation fault. Comunque si, è sempre meglio inizializzarla:
char *sInput = NULL;


Comunque con :

 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 23/08/13 14:16
aaa
25/08/12 17:53
EDIT:Non avevo inizializzato correttamente la variabile
Ultima modifica effettuata da 12/08/13 10:53
25/08/12 18:06
Hai ragione (non avevo inizializzato correttamente la variabile)
Ultima modifica effettuata da 11/08/13 11:08