Problema in C, date un occhiate per favore
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Visualizzazione risultati da 1 a 3 di 3

Discussione: Problema in C, date un occhiate per favore

Cambio titolo
  1. #1
    Utente L'avatar di Tiuz_#8
    Registrato il
    06-04
    Località
    Cremùna
    Messaggi
    189

    Problema in C, date un occhiate per favore

    A scuola mi han dato questo esercizio... io ho provato a risolverò ma non credo che il mio programma sia corretto, mi potete dire cosa non va? Grazie infinite!

    Devo realizzare una procedura che aggiunga qualora si voglia un articolo alla lista magazzino. L'articolo deve contenere le seguenti informazioni:codice,descrizione,quantità,prezzo.

    ecco l'esercizio da me svolto:


    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #define max 10
    typedef struct{
    char codice[6];
    char descrizione[100];
    int prezzo;
    int quantita;
    }articolo;
    struct elemento {
    articolo inf;
    struct elemento *pun;
    };
    struct elemento *crea_lista();
    int f;
    main()
    {
    clrscr();
    f=1;
    do{
    struct elemento *punt_lista;
    punt_lista = crea_lista();
    vuoiContinuare();
    }while(f==1);
    }
    struct elemento *crea_lista()
    {
    struct elemento *p;
    {
    p = (struct elemento *)malloc(sizeof(struct elemento));
    printf("\nInserisci articolo: ");
    printf("\nInserisci codice:");
    scanf("%s", p->inf.codice);
    printf("\nInserisci descrizione: ");
    scanf("%s", p->inf.descrizione);
    printf("\nInserisci prezzo: ");
    scanf("%i",p->inf.prezzo);
    printf("\nInserisci quantita': ");
    scanf("%i",p->inf.quantita);
    }
    return(p);
    }
    int vuoiContinuare() {
    int ok=0;
    int continua=' ';
    while (ok == 0) {
    printf("\nVuoi continuare (s/n)?");
    fflush(stdin);
    scanf("%c",&continua);
    if (continua == 's' || continua == 'S') {
    ok=1;
    f=1;
    return f;
    }
    if (continua == 'n' || continua == 'N') {
    ok=1;
    f=0;
    return f;
    }
    }
    }
    void leggiStringa(char *strMessaggio, char *strDaLeggere, int maxLung) {
    int ok=0;
    char temp[255];
    do {
    printf("\n%s ", strMessaggio);
    fflush(stdin);
    gets(temp);
    if ( strlen(temp) > maxLung )
    printf ("\nTROPPO LUNGA!\n");
    else
    ok=1;
    } while (ok==0);
    strcpy (strDaLeggere, temp);
    }

    Grazie ancora!!

    "With the lights out, it's less dangerous
    Here we are now, entertain us
    I feel stupid and contagious
    Here we are now, entertain us
    A mulato
    An albino
    A mosquito
    My Libido"

  2. #2
    Utente GNU/Linux
    Registrato il
    10-02
    Località
    Roma
    Messaggi
    3.246
    Ho preso il codice ed ho provato a compilarlo, non è malaccio, con poche modifiche diventa ANSI C (e sembra funzioni):
    Codice:
    --- oldTiuz.c   2005-01-21 00:56:26.000000000 +0100
    +++ Tiuz.c      2005-01-21 01:02:12.000000000 +0100
    @@ -1,5 +1,5 @@
     #include <stdio.h>
    -#include <conio.h>
    +#include <string.h>
     #include <stdlib.h>
     #define max 10
     typedef struct{
    @@ -14,15 +14,16 @@
     };
     struct elemento *crea_lista();
     int f;
    -main()
    +int vuoiContinuare(void);
    +int main()
     {
    -       clrscr();
            f=1;
            do{
                    struct elemento *punt_lista;
                    punt_lista = crea_lista();
                    vuoiContinuare();
            }while(f==1);
    +       return 0;
     }
     struct elemento *crea_lista()
     {
    @@ -35,19 +36,19 @@
                    printf("\nInserisci descrizione: ");
                    scanf("%s", p->inf.descrizione);
                    printf("\nInserisci prezzo: ");
    -               scanf("%i",p->inf.prezzo);
    +               scanf("%i",&p->inf.prezzo);
                    printf("\nInserisci quantita': ");
    -               scanf("%i",p->inf.quantita);
    +               scanf("%i",&p->inf.quantita);
            }
            return(p);
     }
     int vuoiContinuare() {
            int ok=0;
    -       int continua=' ';
    +       char continua=' ';
            while (ok == 0) {
                    printf("\nVuoi continuare (s/n)?");
                    fflush(stdin);
    -               scanf("%c",&continua);
    +               scanf(" %c",&continua);
                    if (continua == 's' || continua == 'S') {
                            ok=1;
                            f=1;
    @@ -59,6 +60,7 @@
                            return f;
                    }
            }
    +       return 0;
     }
     void leggiStringa(char *strMessaggio, char *strDaLeggere, int maxLung) {
            int ok=0;
    @@ -66,7 +68,7 @@
            do {
                    printf("\n%s ", strMessaggio);
                    fflush(stdin);
    -               gets(temp);
    +               fgets(temp,255,stdin);
                    if ( strlen(temp) > maxLung )
                            printf ("\nTROPPO LUNGA!\n");
                    else
    gets non era scorretto ma è pericoloso; i return sono d'obbligo in ANSI C (ma perché vuoiContinuare() ritorna un int se modifica una variabile globale? ); conio.h non è standard C e serve a poco (io non ce l'ho e mettendolo dava errori, ma tanto non avevo voglia di pulirmi lo schermo ); se non ti raccapezzi su qualcosa, chiedi pure.

  3. #3
    Utente L'avatar di Tiuz_#8
    Registrato il
    06-04
    Località
    Cremùna
    Messaggi
    189
    Citazione Nonno Cicala
    Ho preso il codice ed ho provato a compilarlo, non è malaccio, con poche modifiche diventa ANSI C (e sembra funzioni):
    Codice:
    --- oldTiuz.c 2005-01-21 00:56:26.000000000 +0100
    +++ Tiuz.c 2005-01-21 01:02:12.000000000 +0100
    @@ -1,5 +1,5 @@
    #include <stdio.h>
    -#include <conio.h>
    +#include <string.h>
    #include <stdlib.h>
    #define max 10
    typedef struct{
    @@ -14,15 +14,16 @@
    };
    struct elemento *crea_lista();
    int f;
    -main()
    +int vuoiContinuare(void);
    +int main()
    {
    - clrscr();
    f=1;
    do{
    struct elemento *punt_lista;
    punt_lista = crea_lista();
    vuoiContinuare();
    }while(f==1);
    + return 0;
    }
    struct elemento *crea_lista()
    {
    @@ -35,19 +36,19 @@
    printf("\nInserisci descrizione: ");
    scanf("%s", p->inf.descrizione);
    printf("\nInserisci prezzo: ");
    - scanf("%i",p->inf.prezzo);
    + scanf("%i",&p->inf.prezzo);
    printf("\nInserisci quantita': ");
    - scanf("%i",p->inf.quantita);
    + scanf("%i",&p->inf.quantita);
    }
    return(p);
    }
    int vuoiContinuare() {
    int ok=0;
    - int continua=' ';
    + char continua=' ';
    while (ok == 0) {
    printf("\nVuoi continuare (s/n)?");
    fflush(stdin);
    - scanf("%c",&continua);
    + scanf(" %c",&continua);
    if (continua == 's' || continua == 'S') {
    ok=1;
    f=1;
    @@ -59,6 +60,7 @@
    return f;
    }
    }
    + return 0;
    }
    void leggiStringa(char *strMessaggio, char *strDaLeggere, int maxLung) {
    int ok=0;
    @@ -66,7 +68,7 @@
    do {
    printf("\n%s ", strMessaggio);
    fflush(stdin);
    - gets(temp);
    + fgets(temp,255,stdin);
    if ( strlen(temp) > maxLung )
    printf ("\nTROPPO LUNGA!\n");
    else
    gets non era scorretto ma è pericoloso; i return sono d'obbligo in ANSI C (ma perché vuoiContinuare() ritorna un int se modifica una variabile globale? ); conio.h non è standard C e serve a poco (io non ce l'ho e mettendolo dava errori, ma tanto non avevo voglia di pulirmi lo schermo ); se non ti raccapezzi su qualcosa, chiedi pure.
    Grazie! Tutto a posto! Ciau!

    "With the lights out, it's less dangerous
    Here we are now, entertain us
    I feel stupid and contagious
    Here we are now, entertain us
    A mulato
    An albino
    A mosquito
    My Libido"

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •