[Utilità del Cavolo] Programma Gestione Figurine [RISOLTO]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: [Utilità del Cavolo] Programma Gestione Figurine

Messaggio da Blallo »

in effetti senza quello compila
però ora non parte proprio
lo analizzo un altro po'

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: [Utilità del Cavolo] Programma Gestione Figurine

Messaggio da Mario Vanoni »

jimmy_page_89 ha scritto:in effetti senza quello compila
però ora non parte proprio
lo analizzo un altro po'
Oggi e domani non ho tempo, nipotina di 13 mesi!
Concordo con j0kers, lo stesso errore tuo,
sempre nelle righe dove usi "int N".

PS Programma _ben_ riscritto, non mi piacciono, sono l'eccezione,
i messaggi, ma usando tastature US-ASCII e sempre LANG=US ...

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: [Utilità del Cavolo] Programma Gestione Figurine

Messaggio da Blallo »

Mario Vanoni ha scritto:Oggi e domani non ho tempo, nipotina di 13 mesi!
Concordo con j0kers, lo stesso errore tuo,
sempre nelle righe dove usi "int N".
tranquillo mario, il dovere prima di tutto :D

Codice: Seleziona tutto

#include <stdio.h>
#include <stdlib.h>
#define N 734
#define TA 200

void print_menu();
void open_file(FILE **fp, char buf[TA], int *vect);
void add(char buf[TA], int *vect);
void rem(char buf[TA], int *vect);
void check_less(int vect[N]);
void check_single(char buf[TA], int vect[N]);
void gen_less(FILE **fp, int vect[N]);
void saving_all(FILE **fp, int vect[N], int *chs);

int main()
{
    FILE *fp;
    char buf[TA];
    int vect[N];
    int chs=0, opt=0;

    open_file(&fp, buf, vect);
    while(chs==0)
	{
        print_menu(); //lo so che è inutile, ma mi piace mettere così :P
		fgets(buf, TA, stdin);
		sscanf(buf, "%d", &opt);
		switch(opt)
		{
		    case 1:
                add(buf, vect);
                break;
            case 2:
                rem(buf, vect);
                break;
            case 3:
                check_less(vect);
                break;
            case 4:
                check_single(buf, vect);
                break;
            case 5:
                gen_less(&fp, vect);
                break;
            case 6:
                printf("Sto Salvando..\n");
                saving_all(&fp, vect, &chs);
                printf("Uscita\n");
                break;
            default:
                printf("Comando Errato\n");
                break;
		}
	}
    return EXIT_SUCCESS;
}

void open_file(FILE **fp, char buf[TA], int *vect)
{
    int opt, i=0, chk=0;

    if(((*fp)=fopen("figu.txt","r")) == NULL)
    {
        while(chk == 0)
        {
            printf("Il file non esiste! Che vuoi fare?\n");
            printf("1:Crea Nuovo File\n");
            printf("2:Esci\n");
            fgets(buf, TA, stdin);
            sscanf(buf, "%d", &opt);
            switch(opt)
            {
                case 1:
                    if(((*fp)=fopen("figu.txt","w"))==NULL)
                    {
                        printf("Errore Apertura File!\n");
                        exit(1);
                    }
                    fclose(*fp);
                    for(i=0;i<N;i++)
                        vect[i]=0;
                    chk=1;
                    break;
                case 2:
                    printf("Uscita\n");
                    chk=1;
                    break;
                default:
                    printf("Comando Errato\n");
                    break;
            }
        }
    }
    else
    {
        while((fscanf((*fp), "%d", vect[i])) == 1 && !feof(*fp))
            i++;
        fclose(*fp);
    }
}

void print_menu()
{
    printf("1:Aggiungi Figurine\n");
	printf("2:Rimuovi Figurine\n");
	printf("3:Figurine Mancanti\n");
	printf("4:Controlla Figurina\n");
	printf("5:Genera Mancanti\n");
	printf("6:Esci\n");
}

void add(char buf[TA], int *vect)
{
    int num, chk;

    printf("TAerminare con 0\n");
    while(chk == 0)
    {
        fgets(buf, TA, stdin);
        sscanf(buf, "%d", &num);
        if(num == 0)
            chk=1;
        else if(num > N)
            printf("Numero TAroppo Grande\n");
        else
        {
            if(vect[num-1] == 1)
                printf("Figurina Già Presente\n");
            else
                vect[num-1]=1;
        }
    }
}

void rem(char buf[TA], int *vect)
{
    int num, chk;

    printf("Terminare con 0\n");
    while(chk == 0)
    {
        fgets(buf, TA, stdin);
        sscanf(buf, "%d", &num);
        if(num == 0)
            chk=1;
        else if(num > N)
            printf("Numero TAroppo Grande\n");
        else
        {
            if(vect[num-1] == 0)
                printf("Figurina Già Assente\n");
            else
                vect[num-1]=0;
        }
    }
}

void check_less(int vect[N])
{
    int i, num=0;

	for(i=0;i<N;i++)
		if(vect[i] == 0)
			num++;

    printf("%d\n", num);
}

void check_single(char buf[TA], int vect[N])
{
    int num, chk=0;

    while(chk == 0)
    {
        fgets(buf, TA, stdin);
        sscanf(buf, "%d", &num);
        if(num==0)
            break;
        else if(num > N)
            printf("Numero TAroppo Grande\n");
        else
        {
          if(vect[num-1] == 1)
            printf("Presente\n");
          else
            printf("Assente\n");
        }
    }
}

void gen_less(FILE **fp, int vect[N])
{
    int i;

    if(((*fp)=fopen("mancanti.txt","w"))==NULL)
    {
        printf("Errore Apertura File!");
        exit(1);
    }

    for(i=0;i<N;i++)
    if(vect[i]==0)
        fprintf((*fp), "%d ", i+1);

    fclose(*fp);
}

void saving_all(FILE **fp, int vect[N], int *chs)
{
    int i;

    if(((*fp)=fopen("figu.txt","w")) == NULL)
    {
        printf("Errore Apertura File");
		exit(1);
    }

	for(i=0;i<N;i++)
        fprintf((*fp), "%d ", vect[i]);

    (*chs)=1;

    fclose(*fp);
}
ho provveduto a togliere tutte le int N ed effettivamente compila
però fa un comportamento sgradito alla open_file, che ora analizzerò
mi crea il file anche se scelgo l'opzione 2 ed esce
Mario Vanoni ha scritto:PS Programma _ben_ riscritto, non mi piacciono, sono l'eccezione,
i messaggi, ma usando tastature US-ASCII e sempre LANG=US ...
che vuol dire?

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: [Utilità del Cavolo] Programma Gestione Figurine

Messaggio da Blallo »

tutto a posto, dovevo solo mettere una exit al case 2: nello switch della open_file

Codice: Seleziona tutto

case 2:
printf("Uscita\n");
exit(0);
break;
se avete qualche altro suggerimento non esitate :D

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: [Utilità del Cavolo] Programma Gestione Figurine

Messaggio da Blallo »

alla riga 96 mi da questo warning

Codice: Seleziona tutto

/home/liguori/figs/main.c|96|warning: format ‘%d’ expects type ‘int *’, but argument 3 has type ‘int’|
anche se il programma gira bene
EDIT non gira un piffero :(
RIEDIT: risolto, era banale, bastava sostituire nella fscanf vect con &vect
ora tutto funziona

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: [Utilità del Cavolo] Programma Gestione Figurine

Messaggio da Mario Vanoni »

jimmy_page_89 ha scritto:tutto a posto, dovevo solo mettere una exit al case 2: nello switch della open_file

Codice: Seleziona tutto

case 2:
printf("Uscita\n");
exit(0);
break;
se avete qualche altro suggerimento non esitate :D
Nipotina che dorme ...

Un break; dopo un exit(0); e` inutile.

Ma non funziona ancora l'ultima versione tua:

Codice: Seleziona tutto

root@va2:~# gcc -O2 -s -static -o cavolo cavolo3.c
root@va2:~# cavolo
Il file non esiste! Che vuoi fare?
1:Crea Nuovo File
2:Esci
1
1:Aggiungi Figurine
2:Rimuovi Figurine
3:Figurine Mancanti
4:Controlla Figurina
5:Genera Mancanti
6:Esci
6
Sto Salvando..
Uscita
root@va2:~# cavolo
Segmentation fault
root@va2:~# 
Per i messaggi:
printf("Numero TAroppo Grande\n");
printf("Figurina Già Presente\n");
Nel nvi le lettere accentate diventano illegibili,
se usi un sistema 7-bit US-ASCII.
Idem con il grep, less e more.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: [Utilità del Cavolo] Programma Gestione Figurine

Messaggio da Mario Vanoni »

jimmy_page_89 ha scritto:alla riga 96 mi da questo warning

Codice: Seleziona tutto

/home/liguori/figs/main.c|96|warning: format ‘%d’ expects type ‘int *’, but argument 3 has type ‘int’|
anche se il programma gira bene
EDIT non gira un piffero :(
RIEDIT: risolto, era banale, bastava sostituire nella fscanf vect con &vect
ora tutto funziona

Confermo, ora riparte senza errore.

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: [Utilità del Cavolo] Programma Gestione Figurine

Messaggio da Blallo »

Mario Vanoni ha scritto:Per i messaggi:
printf("Numero TAroppo Grande\n");
printf("Figurina Già Presente\n");
Nel nvi le lettere accentate diventano illegibili,
se usi un sistema 7-bit US-ASCII.
Idem con il grep, less e more.
sono su una semplice tastiera IT
il TA è dato da un Sostituisci applicato male :)
a questo punto per usarlo dappertutto sostituisco le accentate con lettera + apostrofo, o non c'è neppure quello sulla US-ASCII?

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: [Utilità del Cavolo] Programma Gestione Figurine

Messaggio da Mario Vanoni »

jimmy_page_89 ha scritto: sono su una semplice tastiera IT
a questo punto per usarlo dappertutto sostituisco le accentate con lettera + apostrofo, o non c'è neppure quello sulla US-ASCII?
L'ASCII character set ha 127 caratteri, compresi gli accenti.
Quindi e`, perche', ecc., no problems con sistemi non IT.

Ma a questo punto, permetti una osservazione generale:
perche' non mettere i messaggi in inglese a` la UNIX dei tempi?

Codice: Seleziona tutto

root@va2:~# ls eeee
ls: cannot access eeee: No such file or directory
root@va2:~#
Molto piu` compresibile per un informatico di altra lingua madre.

Rispondi