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:
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);
}
questa e' una bozza di codice, il problema che ho adesso, e' che non esce mai dal ciclo...
ciao e grazie dell'aiuto a tutti