Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 23
  1. #11
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255
    #include <stdlib.h>
    #include <stdio.h>

    void main()
    {
    int numelem;
    int *dati,min,max,elem;

    printf("Numero elementi? ");
    scanf("%d",&numelem);

    // alloca la memoria
    dati = (int *) malloc(numelem * sizeof(int));
    if(!dati)
    {
    printf("Poca memoria.");
    exit(1);
    } // <-- mancava questa, altrimenti il codice non avrebbe senso!

    //chiede i dati
    int elem=0; // <---- qui da un errore ke nn riesco a trovare
    printf("Nuovo elemento: ");
    scanf("%d", &dati[elem=0]);
    //inizializza min e max
    min=max=dati[elem];
    for(elem = 1; elem<numelem - 1; elem++)
    {
    printf("Nuovo elemento: ");
    scanf("%d", &dati[elem]);
    }

    // Trova min e max
    for(elem=0;elem<numelem-1; elem++)
    {
    if(max<dati[elem])
    max = dati[elem];
    else if(min>dati[elem])
    min=dati[elem];
    }

    // visualizza i risultati
    printf("Minimo: %d\nMassimo: %d", min, max);

    }

  2. #12
    in C, a differenza del C++
    le variabili locali vanno dichiarate all'inizio del "blocco".
    Nel tuo codice, "int elem=0" va dichiarata
    subito dopo la parentesi graffa di apertura del blocco funzione main()

    int main()
    {
    int elem=0; // <--
    ...
    ...
    ...
    ...Terrible warlords, good warlords, and an english song

  3. #13
    Originariamente inviato da s_p_81
    codice:
        //chiede i dati
        elem=0; /* già l'hai dichiarato sopra */
        printf("Nuovo elemento: ");
        scanf("%d", &dati[elem]); /* elem vale già 0 */
        //inizializza min e max
    in c poi, a differenza del c++, puoi solo dichiarare le variabili
    all'inizio di un blocco {}

    codice:
    int main()
    {
      int a;
    
      scanf("%d", &a);
      printf("%d",a);
    
      {
        int n;
        scanf("%d", &n);
        printf("%d",n);
      }
      /* da qui in poi n non può essere usato */
      /* perchè "is out of scope" (non più valido in questo contesto) */
    }
    2) in c puoi usare solo i commenti /* */ e non // introdotti da c++

    di solito il compilatore riconosce automaticamente in base all'estensione del file .c o .cc .cpp .c++ ecc..
    in che linguaggio deve compilare, ma può essere forzato a compilare in un determinato linguaggio.

    Ciao

  4. #14
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Originariamente inviato da internet
    in c puoi usare solo i commenti /* */ e non // introdotti da c++

    se mi fai cadere questa certezza potrei anche pensare che babbo natale esiste
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  5. #15
    Originariamente inviato da internet
    in c puoi usare solo i commenti /* */ e non // introdotti da c++
    [/B]
    in c99 sono stati introdotti anche i //
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  6. #16
    Originariamente inviato da infinitejustice

    se mi fai cadere questa certezza potrei anche pensare che babbo natale esiste
    //

    Non so con certezza se al momento è stato "introdotto"
    nello standard ansi anche per il C, in principio era così
    anche se molti (quasi tutti i) compilatori C lo accettano
    (lo hanno sempre accettato) senza segnalare errore.
    ...Terrible warlords, good warlords, and an english song

  7. #17
    In c99 è possibile dichiarare le variabili in mezzo al codice e non
    necessariamente all'inizio di un blocco {}

    codice:
    double a = 3.4, b;
    b = a * a;
    int m; //permesso solo in C99
    scanf("%d", &m);
    Sono stati introdotti i commenti // ereditati dal c++ (come già stato detto)
    Il compilatore CL di microsoft (quello usato da visual c) li aveva già introdotti prima di C99, ma era una semplice estensione non standard, inoltre il suo compilatore non rispetta l'ansi c99
    in quanto non permette la dichiarazione di cui all'esempio fatto sopra.

    C99 introduce le funzioni inline
    (che già esistevano da secoli in c++)

    codice:
    inline int converti(int a)
    {
     return a*1936.27;
    }
    è una indicazione al compilatore di espandere il corpo della funzione laddove venga richiamata, invece di effettuare una vera è propria function call.

    codice:
     e = converti(lire);
    gli standard c precedenti effettuano una chiamata di funzione,
    in c99 (se ritiene necessario farlo) espande +/- in questo modo
    il codice

    codice:
     e = lire*1936.27;
    questo per prevenire l'uso di MACRO per simulare le funzioni, in quanto sono fonte di guai in fase di debug.

    C99 inoltre introduce:

    array a lunghezza variabile

    codice:
    void func(int sz) 
    {
     int arr[sz]; // sz non deve essere const; valido solo C99
    }
    nuovi header files
    nuovi tipi di dato
    long long int
    boolean (non presente negli standard c precedenti, ma presente da sempre in c++)
    complex (per i numeri complessi)
    ... e altro


    La portabilità di c99 allo stato attuale 1/2004 è il suo punto debole
    GCC è quello che + si avvicina allo standard C99 (manca ancora qualcosa).
    Microsoft e Borland sono ancora restii a implementarlo.

    Ritornando a noi se in Visual c (quindi CL) viene accettato
    // come commento per i sorgenti c, non significa che rispetta
    C99, ma è semplicemente fuori standard ansi C89.
    L'opzione /Za disabilita le estensioni Microsoft.

    "Microsoft and Borland do not seem to be interested in adding c99 support."
    Quindi per ora è meglio restare all'ANSI C89,
    inoltre è importante non confondere c++ con c.

    http://www.informit.com/isapi/guide~...de/content.asp
    http://en.wikipedia.org/wiki/C_programming_language#C99

  8. #18
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Originariamente inviato da Johnny_Depp
    //

    Non so con certezza se al momento è stato "introdotto"
    nello standard ansi anche per il C, in principio era così
    anche se molti (quasi tutti i) compilatori C lo accettano
    (lo hanno sempre accettato) senza segnalare errore.
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  9. #19

    Bha.............

    Da anni su questo forum tutti programmatori C
    e sempre errori di programmazione..
    for(elem = 1; elem<numelem - 1; elem++)
    {
    printf("Nuovo elemento: ");
    scanf("%d", &dati[elem]);
    }
    Tipico esempio di Dillentantismo Informatico,
    infatti se immetto 1 char 'b' in questo caso succede
    questo:
    Nuovo Elemento :b
    Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :Nuovo Elemento :[root@localhost netfilter]#
    Perchè?

  10. #20
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char *dat, min, max, e, t_e;
        printf("Inserire numero totale delgli elementi: ");
        scanf("%d", &t_e);
        /* pulisco il buffer */
        while(getchar()!='\n');
        /* alloco dinamicamente la memoria dell'array nell'heap, se possibile */
        if( ! (dat = (char *) malloc(t_e * sizeof(char)+1)) )
        {
            printf("\aImpossibile allocare la memoria!\n");
            system("pause");
            return 1;
        }    
        /* inserisco gli elementi nell'array */
        for(e=0; e<t_e; e++) 
        {
            printf("Inserisci elemento [%d di %d]: ", e+1, t_e);
            scanf("%c", &dat[e]);
            /* pulisco il buffer */
            while(getchar()!='\n');
        }
        /* termino la stringa con il carattere NULL */
        dat[e]='\0';
        /* inizializzo le variabili (min e max) */
        min=max=*dat;
        /* Trovo l'elemento minimo e l'elemento massimo */
        for(e=0; dat[e]!='\0'; e++) 
        {
            if(min>dat[e])
                min=dat[e];
            else if(max<dat[e]) 
               max=dat[e];
        }
        /* visualizzo l'elemento minimo e l'elemento massimo */
        printf("Minimo:  %c\nMassimo: %c\n", min, max);
        system("pause");
        return 0;
    }
    ...Terrible warlords, good warlords, and an english song

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.