devo acquisire due elementi, prima uno e poi un'altro in due stringhe diverse.
l'elemento puo' essere o una lettera compresa tra A e Z oppure tra a e z quindi minuscole oppure maiuscole...
se l'elemento inserito e' una lettera maiuscola deve essere del tipo: A( a,x,... )
io pensavo di fare cosi:
1) chiedo all'utente di inserire il primo termine nella stringa1, poi richiamo la funzione che controlla se e' stato inserito tutto, secondo i miei criteri;
se non rispetta i miei criteri ricomincia da capo richiedendo di reinserire la stringa..
e cosi anche per la seconda stringa.
i controlli sono:
- se e' una lettera compresa tra a e z ne deve inserire soltanto una e poi passare all'inserimento della seconda stringa...
- se il primo elemento della stringa e' una lettera maiuscola da A a Z, l'elemento successivo e' una '(' _e poi qua inserisce quello che vuole e l'ultimo elemento prima di '\0' deve essere _')'
per fare questo io pensavo di allocare per la stringa uno spazio di 2 caratteri, cosi che per le costanti e le variabili l'utente puo' inserire solo un'elemento, mentre per le funzioni rialloca lo spazio aumentando ogni volta di 1 con realloc..
per ora ho scritto questo:
questa e' una bozza di codice, il problema che ho adesso, e' che non esce mai dal ciclo...codice:/*dichiarazione delle librerire*/ #include <stdio.h> #include <stdlib.h> /*dichiarazione delle funzioni*/ int controlli(char* stringa); /*definizione del main*/ int main(int argc, const char * argv[]) { int i, esito = 0, esito_controlli = 0; char *stringa = NULL, carattere_non_letto; /*allocazione della stringa*/ stringa=(char*)malloc(2*sizeof(char)); /*acquisizione del primo temine*/ do { printf("inserisci il primo termine:\n"); esito = scanf("%s", stringa); /*validazione stretta*/ if(esito !=1 || esito_controlli !=1) { do{ scanf("%c", &carattere_non_letto);} while(carattere_non_letto != '\n'); } } while (esito !=1 || esito_controlli !=1); printf("la stringa inserita e': %s", stringa); return 0; } /*funzione per controllare se e' stato inserito tutto correttamente*/ int controlli(char* stringa) { int esito_controlli = 0, esito, i; /*controllo se il carattere successivo ad una lettera minuscola e' il carattere di terminazione*/ for (i = 0; i != '\0'; i++) { if (stringa[i] >= 'a' && stringa[i] <= 'z') { if (stringa[i+1] == '\0') { esito_controlli = 1; esito = 1; } } else esito_controlli = 0; esito = 0; } return (esito_controlli); }
ciao e grazie dell'aiuto a tutti

Rispondi quotando