Output: se sono parole funziona, se sono numeri no

di il
8 risposte

Output: se sono parole funziona, se sono numeri no

Buongiorno, ho realizzato diversi programmi seguendo le istruzioni del prof e funzionano correttamente se non fosse che ad esempio, quando chiedo di visualizzare le info su un determinato prodotto, elementi come descrizione e nome vengono stampati a video così come lo ho inseriti, mentre il prezzo e la giacenza sono sostituiti da un numero tipo 2045716 (non lo ricordo con esattezza ma è a 7 cifre).
Inoltre ho notato che l icona del file scritto da me al compilatore è .cpp invece i programmi scritti dal prof sono .c
Che devo fare?

8 Risposte

  • Re: Output: se sono parole funziona, se sono numeri no

    L'estensione del file non dovrebbe essere un problema. cpp è un file in linguaggio c++, che però è compatibile col c.
    Riporta il pezzo di codice che da problemi. Eventualmente, prova anche a stampare il valore di ritorno di sizeof(int), in modo tale da verificare che gli interi siano su 4 byte (se fossero su 2 non riusciresti a visualizzare i numeri di 7 cifre).
  • Re: Output: se sono parole funziona, se sono numeri no

    //pitta_rozzo
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct scarpe{
    	int cod_prodotto;
    	char descrizione[20];
    	int giacenza;
    	float prezzo;
    	} t_scarpe;
    	
    typedef struct clienti{
    	 int cod_cliente;
    	 char nome_cognome[20];
    	 char Citta[2];
    }t_clienti;
    
    typedef struct acquisti_online{
    	t_scarpe cod_prodotto;
    	t_clienti cod_cliente;
    	int quantita;
    	char data_ora[16]; // DD-MM-YYYY-HH-MM
    	}t_acquisti_online;
    
    //MEMORIZZAZIONE DI NUOVI PRODOTTI
    void memorizza_scarpe (){
    	
    	t_scarpe scarpe;
    	
    	FILE *fscarpe=fopen ("scarpe.dat","a+"); 
    
    	printf ("codice prodotto: ");
    	scanf("%d", &scarpe.cod_prodotto);
    	printf ("\n descrizione: ");
    	scanf("%s", scarpe.descrizione);
    	printf("\n giacenza: ");
    	scanf("%d", &scarpe.giacenza);
    	printf("\n prezzo: ");
    	scanf("%f", &scarpe.prezzo);
    	
    
    	fwrite(&scarpe,sizeof(t_scarpe),1,fscarpe);
    	fclose (fscarpe);
    	}
    	
    //MODIFICA PRODOTTI TRAMITE CODICE PRODOTTO
    void modifica_prodotto (){
    	
    	t_scarpe scarpe;
    	int codice_cercato;
    	
    	FILE *fscarpe=fopen ("scarpe.dat", "r+");
    	
    	printf ("inserisci il codice prodotto da cercare");
    	scanf ("%d", &codice_cercato);
    	
    	while(fread(&scarpe,sizeof(t_scarpe),1,fscarpe)==1){
    		if (scarpe.cod_prodotto==codice_cercato){
    				
    				char nuova_descrizione[20];
    				int nuova_giacenza;
    				float nuovo_prezzo;
    			
    		printf ("\ninserisci la nuova descrizione: ");
    		scanf("%s", nuova_descrizione);
    		printf("\ninserisci la nuova giacenza");
    		scanf ("%d", &nuova_giacenza);
    		printf ("\n inserisci il nuovo prezzo");
    		scanf ("%f", &nuovo_prezzo);
    		
    			scarpe.descrizione==nuova_descrizione;
    			scarpe.giacenza=nuova_giacenza;
    			scarpe.prezzo=nuovo_prezzo;
    			
    		fseek(fscarpe,-sizeof(t_scarpe),SEEK_CUR);
    		fwrite(&scarpe,sizeof(t_scarpe),1,fscarpe);
    		}
    		else {printf ("codice non trovato");
    			system("pause");}
    	}
    	fclose (fscarpe);
    	}
    	
    	//MEMORIZZAZIONE DI NUOVI CLIENTI
    void memorizza_clienti (){
    	
    	t_clienti clienti;
    	
    	FILE *fclienti=fopen ("clienti.dat","a+"); 
    
    	printf ("codice cliente: ");
    	scanf("%d", &clienti.cod_cliente);
    	printf ("\n nome e cognome: ");
    	scanf("%s", clienti.nome_cognome);
    	printf("\n citta': ");
    	scanf("%s", &clienti.Citta);
    	
    	fwrite(&clienti,sizeof(t_clienti),1,fclienti);
    	fclose (fclienti);
    	system ("pause");
    	}
    	
    	//MEMORIZZAZIONE ACQUISTI ONLINE
    void acquisti_online (){
    	
    	t_acquisti_online acquisti_online;
    	t_clienti clienti;
    	t_scarpe scarpe;
    	
    	FILE *facquisti_online=fopen ("acquisti_online.dat","a+"); 
    
    	printf ("codice cliente: ");
    	scanf("%d", &clienti.cod_cliente);
    	printf ("\n codice prodotto: ");
    	scanf("%d", &scarpe.cod_prodotto);
    	printf("\n quantita': ");
    	scanf("%s", &acquisti_online.quantita);
    	printf("\n data e ora dell'acquisto: ");
    	scanf("%s", &acquisti_online.data_ora);
    	
    	fwrite(&acquisti_online,sizeof(acquisti_online),1,facquisti_online);
    	fclose (facquisti_online);
    	}
    	
    	/*visualizza acquisti on line
    	
    void visualizza_acquisti (){
    	
    	t_acquisti_online acquisti_online;
    	t_clienti clienti;
    	
    	
    }*/
    	
    	//VISUALIZZA PRODOTTI CON GIACENZA<50
    void giacenza_50() {
    
    	t_scarpe scarpe;
    	
    	FILE *fscarpe=fopen ("scarpe.dat","r"); 
    	
    	while(fread(&scarpe,sizeof(t_scarpe),1,fscarpe)==1){
    		if (scarpe.giacenza<50){
    
    		printf ("prodotto %d, pezzi %d", &scarpe.cod_prodotto, &scarpe.giacenza);
    		printf("\n**********\n");
    		system ("pause");
    }
    }
    	fclose (fscarpe);
    }
    
    main(){
    	
    	int scelta;
    	
    	do{
    		
    		system ("cls");
    		printf ("1.inserisci prodotti\n");
    		printf("2.modifica prodotti\n");
    		printf ("3.inserisci clienti\n");
    		printf("4.memorizzazione acquisti on line\n");
    		printf("5.giacenza<50\n");
    		printf ("6. ESCI\n");
    		printf ("***********************************\n");
    		scanf("%d", &scelta);
    		
    		switch(scelta){
    			
    			case 1: memorizza_scarpe ();
    					break;
    			
    			case 2: modifica_prodotto ();
    					break;
    					
    			case 3: memorizza_clienti ();
    					break;
    			
    			case 4: acquisti_online ();
    					break;
    			
    			case 5: giacenza_50();
    					break;
    			default: break;
    			
    		} } while(scelta=!6);
    	}
    
    
    eccolo!
    PS sapresti dirmi anche perchè dopo una selezione il programma si chiude invece di tornare al menu dello switch ? grazie
  • Re: Output: se sono parole funziona, se sono numeri no

    Occhio a

    while(scelta=!6);

    che deve essere

    while(scelta!=6);
  • Re: Output: se sono parole funziona, se sono numeri no

    Oregon! Grazie mille!
  • Re: Output: se sono parole funziona, se sono numeri no

    Controlla:
    printf ("prodotto %d, pezzi %d", &scarpe.cod_prodotto, &scarpe.giacenza);
  • Re: Output: se sono parole funziona, se sono numeri no

    dvaosta ha scritto:


    controlla:
    printf ("prodotto %d, pezzi %d", &scarpe.cod_prodotto, &scarpe.giacenza);
    Adesso funziona perfettamente! grazie mille!
    ricapitolando: "&" non va messo quando voglio puntare il campo di una struttura, poichè "struttura.campo" è già un indirizzo, ho capito bene ?
  • Re: Output: se sono parole funziona, se sono numeri no

    azoto ha scritto:


    ricapitolando: "&" non va messo quando voglio puntare il campo di una struttura, poichè "struttura.campo" è già un indirizzo, ho capito bene ?
    No, capito male.

    struttura.campo non è un indirizzo a meno che il campo non sia un array.

    In questo caso i campi erano semplici valori interi e quindi il discorso è sbagliato. Nella printf non si mette & perché tu non vuoi visualizzare l'indirizzo di quegli interi ma il loro valore. E' nella scanf che aggiungi il & perché la scanf lavora sull'indirizzo delle variabili.
  • Re: Output: se sono parole funziona, se sono numeri no

    Ok chiarissimo!
Devi accedere o registrarti per scrivere nel forum
8 risposte