Oppure

Loading
01/09/11 11:25
Liuk
/* 
 	Programma:	cavallin-agenda.c	
 	Autore:		Cavallin Luca	
 	Classe:		4CINF	
 	Data:		30/08/2011	
 	Descrizione:	Attività estive	
*/

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

#define DIM 100

void clear(void);
void pEnter(void);
void setColor(int a, int b, int c);


struct item
{
    char nome[DIM];
    char cognome[DIM];
    int numero;
    int valido;
};

typedef struct item item;

void inserisciNominativo(item[], int*);
void cancellaNominativo(item[], int*);
void stampaAgenda(item[], int*);
void ricercaNominativo(item[], int*);


int main(void)
{
	system("clear");
	item agenda[DIM];
	int *nnom = 0;
	int ch;
	do
	{
		setColor(1, 0, 32);
		printf("\n\t\t*****************************************\n");
		printf("\t\t*                                       *\n");
		printf("\t\t*           CAVALLIN - AGENDA           *\n");
		printf("\t\t*                                       *\n");
		printf("\t\t*****************************************\n\n");
		printf("\n \t* MENÙ *\n\n");
		setColor(1, 0, 0);
		printf(" 1| Inserire nominativo \n");
		printf(" 2| Cancellare nominativo\n");
		printf(" 3| Stampa agenda\n");
		printf(" 4| Ricerca nominativo\n");
		printf(" 0| Esci\n");
		printf("\n Inserisci scelta: ");
		scanf("%d", &ch);
		system("clear");
		switch(ch)
		{
			case 1:
				inserisciNominativo(agenda, &nnom);
				pEnter();
				break;
				
			case 2:
				pEnter();
				break;

			case 3:
				stampaAgenda(agenda, &nnom);
				pEnter();
				break;
				
			case 4:

				pEnter();
				break;
			
			case 0:
				return 0;
				break;
				
			default:
			
				break;
		}
		clear();
	}
	while(ch != 0);
	return 0;
}

void setColor(int a, int b, int c)
{
	printf("\e[%d;%d;%dm", a, b, c);
}

void clear(void)
{
    system("clear");
}

void pEnter(void)
{
	printf("\n\n Premi INVIO per continuare...\n");
	getchar();
}

void inserisciNominativo(item agenda[], int *nnom)
{
    clear();
    int i, ex;
    char tmpNome[DIM], tmpCognome[DIM];
    do
    {
	setColor(1, 0, 32);
	printf("\n Inserimento nominativo\n\n");
	setColor(1, 0 , 1);
	printf(" Nome: ");
	getchar();
	gets(tmpNome);
	printf(" Cognome: ");
	gets(tmpCognome);
	if(*nnom>0)
	{
	    for(i=0; i<*nnom; i++)
	    {
		if(strcmp(tmpNome, agenda[i].nome) == 0 && strcmp(tmpCognome, agenda[i].cognome) == 0 && agenda[i].valido == 0)
		{
		    ex = 1;
		}
	    }
	}
    }
    while(ex=0);
    strcpy(tmpNome, agenda[*nnom].nome);
    strcpy(tmpCognome, agenda[*nnom].cognome);
    printf(" Telefono: ");
    scanf("%d", &agenda[*nnom].numero);
    agenda[*nnom].valido = 0;
    (*nnom)++;
    ex = 0;
}

void cancellaNominativo(item agenda[], int *nnom)
{

}
                        
void stampaAgenda(item agenda[], int *nnom)
{
    int i;
    clear();
    setColor(1, 0, 32);
    printf("\n Stampa agenda\n\n");
    setColor(1, 0, 1);
    for(i=0; i<*nnom; i++)
    {
        if(agenda[i].valido == 0) 
        {
            printf("\n %s\n", agenda[i].nome);
            printf("\n %s\n", agenda[i].cognome);
            printf("\n %d", agenda[i].numero);
        }
    }
}

void ricercaNominativo(item agenda[], int *nnom)
{

}


Ma da dei problemi nell'inserimento del nome: viene inserito solo il numero..
aaa
01/09/11 11:39
HeDo
aggiungi fflush(stdin) prima di ogni gets
aaa
01/09/11 11:50
Liuk
Sono su Linux :cheer:
aaa
01/09/11 12:45
kopiro91
E' un problema irrisolvibile.
Cioè, fino ad ora non son riuscito a trovare una soluzione giusta.


Io ricordo che risolsi mettendo due fgets(), una "fittizia" e l'atra prendeva il nome.
aaa
01/09/11 13:13
Liuk
Io credo che il problema sia più che altro nella copia dal nome temporaneo alla struct v.v
aaa
01/09/11 13:29
HeDo
Postato originariamente da Liuk:

Sono su Linux :cheer:


e quindi?
aaa
01/09/11 17:45
pierotofy
Qualche riga piu' sopra stai utilizzando scanf. Scanf lascia nel buffer di input il carattere di nuova linea. Questo carattere viene poi letto da fgets (e per questo da l'impressione che la chiamata viene ignorata).

fflush e' un workaround, ma e' sconsigliato: gidnetwork.com/…

Usa fgets con consistenza invece di scanf.
Il mio blog: piero.dev