Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C]Chiusara del programma inaspettata

    Ciao,
    ho scritto un programma che conoscendo già i 10 nomi degli studenti e inserendo un voto a ciascuno dica quale sia il miglior studente.
    Però quando lo eseguo trovo 2 problemi:
    1)Dopo che inserisco il voto dell'ultimo studente e premo invio il programma si ferma e mi appare queta scritta: "Si è verificato un errore in Miglior voto alunni.exe. L'applicazione verrà chiusa."
    2)Quando lo compilo il compilatore mi dice "Warning assignment makes integer from pointer
    without a cast" riferito alle righe dove vi è scritto
    codice:
     mnome=nome[i];
    e questa è la prima volta che i appare questa scritta.
    Qualcuno potrebbe aiutarmi spiegandomi dove ho sbagliato?
    codice:
    //Miglior voto delgi alunni conoscendo il nome e cognome
    #include<stdio.h>
    int  main()
    {
        float voti , votimax;
        const char *nome[] = {"Paolo", "Luca", "Giacomo", "Rita", "Mario", "Germano", "Emanuele", "Alessio", "Matteo", "Clara"};
        char mnome; //Corrisponde al nome dello studente migliore
        int i;
        for(i=0;i<10;i++)
        {
                        printf("\nInsersci il %d %c voto corrisondente alla studente %s: ", i+1, 167, nome[i]); 
                        scanf("%f", &voti);
                        if(i==0)
                        {                      
                             votimax=voti;
                             mnome=nome[i];
                        }     
                        else
                        {
                            if(voti>votimax)
                            {
                                  votimax=voti;
                                  mnome=nome[i];
                            }      
                        } 
        }
        printf("\nIl voto massimo e\' di %f ed e\' stato fatto dallo studente di nome %s", votimax, mnome);
        system ("pause");
        return 0;
    }
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  2. #2
    Ciao,
    ho scritto un programma che conoscendo già i 10 nomi degli studenti e inserendo un voto a ciascuno dica quale sia il miglior studente.
    Però quando lo eseguo trovo 2 problemi:
    1)Dopo che inserisco il voto dell'ultimo studente e premo invio il programma si ferma e mi appare queta scritta: "Si è verificato un errore in Miglior voto alunni.exe. L'applicazione verrà chiusa."
    2)Quando lo compilo il compilatore mi dice "Warning assignment makes integer from pointer
    without a cast" riferito alle righe dove vi è scritto codice:
    codice:
     mnome=nome[i];
    e questa è la prima volta che i appare questa scritta.
    Qualcuno potrebbe aiutarmi spiegandomi dove ho sbagliato?
    codice:
    //Miglior voto delgi alunni conoscendo il nome e cognome
    #include<stdio.h>
    int main()
    {
    float voti , votimax;
    const char *nome[] = {"Paolo", "Luca", "Giacomo", "Rita", "Mario", "Germano", "Emanuele", "Alessio", "Matteo", "Clara"};
    char mnome; //Corrisponde al nome dello studente migliore
    int i;
    for(i=0;i<10;i++)
    {
    printf("\nInsersci il %d %c voto corrisondente alla studente %s: ", i+1, 167, nome[i]); 
    scanf("%f", &voti);
    if(i==0)
    { 
    votimax=voti;
    mnome=nome[i];
    } 
    else
    {
    if(voti>votimax)
    {
    votimax=voti;
    mnome=nome[i];
    } 
    } 
    }
    printf("\nIl voto massimo e' di %f ed e' stato fatto dallo studente di nome %s", votimax, mnome);
    system ("pause");
    return 0;
    }
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    char mnome

    è un semplice char e non un array di char, come dovrebbe essere in C (è ovvio che alla fine hai quell'errore)

    E la copia non avviene con un = ma con la funzione strcpy


    Rivedi il capitolo sulle stringhe (array di char) perché hai delle lacune ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Ciao,
    ho provato ad usare lo strcpy ma essendo la priva volta ne faccio uso non sapevo bene come gestirlo (anche avendo letto qualche pagina su internet), quindi ho proprio paura di aver fatto molti erori grossolani anche sugli arrey, in quanto è da poco che li sto utilizzando e sto trovando delle difficoltà.
    Potreste gentilmente darmi delle dritte su come sistemare il codice?
    Ciao e grazie in anticipo.
    codice:
    //Miglior voto delgi alunni conoscendo il nome e cognome
    #include<stdio.h>
    #include <string.h> //Serve per far funzionare lo strcpy
    int  main()
    {
        float voti , votimax;
        const char *nome[] = {"Paolo", "Luca", "Giacomo", "Rita", "Mario", "Germano", "Emanuele", "Alessio", "Matteo", "Clara"};
        const char *mnome [] ; //mnome corrisponde al nome dello studente migliore
        int i;
        for(i=0;i<10;i++)
        {
                        printf("\nInsersci il %d %c voto corrisondente alla studente %s: ", i+1, 167, nome[i]); //Il numero 167 corrisponde (in codice ascii) al pallino ° che si mette per indicare l'ordine
                        scanf("%f", &voti);
                        if(i==0)
                        {                      
                             votimax=voti;
                             strcpy(mnome, nome);
                        }     
                        else
                        {
                            if(voti>votimax)
                            {
                                  votimax=voti;
                                  strcpy(mnome, nome);
                            }      
                        } 
        }
        printf("\nIl voto massimo e\' di %f ed e\' stato fatto dallo studente di nome %s", votimax, mnome);
        system ("pause");
        return 0;
    }
    P.S. I commenti a lato servono solo a me per capire meglio
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Un array di char è questo

    char mnome[30];

    ed è fatto da 30 caratteri compreso il terminatore

    Invece

    char *nome[]

    è un array di puntatori e nella strcpy va usato individuando il puntatore all'elemento da copiare

    strcpy(mnome, nome[i]);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Ciao,
    ho cercato di sistemarlo, però quando lo faccio comipilare, il compilatore mi dice che la strcpy contiene delle incompatibilità tra tipi, quindi mi viene da pensare che nome e mnome debbano essere entrambi o char o const char però non so se sia giusto.
    codice:
    //Miglior voto delgi alunni conoscendo il nome e cognome
    #include<stdio.h>
    #include <string.h> //Serve per far funzionare lo strcpy
    int  main()
    {
        float voti , votimax;
        const char *nome[] = {"Paolo", "Luca", "Giacomo", "Rita", "Mario", "Germano", "Emanuele", "Alessio", "Matteo", "Clara"}; //E' è un array di puntatori 
        char *mnome [30] ; //mnome corrisponde al nome dello studente migliore
        int i;
        for(i=0;i<10;i++)
        {
                        printf("\nInsersci il %d %c voto corrisondente alla studente %s: ", i+1, 167, nome[i]); //Il numero 167 corrisponde (in codice ascii) al pallino ° che si mette per indicare l'ordine
                        scanf("%f", &voti);
                        if(i==0)
                        {                      
                             votimax=voti;
                             strcpy(mnome, nome[i]);
                        }     
                        else
                        {
                            if(voti>votimax)
                            {
                                  votimax=voti;
                                  strcpy(mnome, nome[i]);
                            }      
                        } 
        }
        printf("\nIl voto massimo e\' di %f ed e\' stato fatto dallo studente di nome %s", votimax, mnome);
        system ("pause");
        return 0;
    }
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma scusa ... fai un po' di attenzione ... mi pare di averti scritto che devi usare

    char mnome [30] ;

    e ti ho detto anche il perché è differente da

    char *mnome [30] ;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Ciao,
    grazie mille per i vostri aiuti.
    Ecco il codice finito
    codice:
    //Miglior voto delgi alunni conoscendo il nome e cognome
    #include<stdio.h>
    #include <string.h> //Serve per far funzionare lo strcpy
    int  main()
    {
        float voti , votimax;
        const char *nome[] = {"Paolo", "Luca", "Giacomo", "Rita", "Mario", "Germano", "Emanuele", "Alessio", "Matteo", "Clara"}; //E' è un array di puntatori 
        char mnome [30] ; //mnome corrisponde al nome dello studente migliore
        int i;
        for(i=0;i<10;i++)
        {
                        printf("\nInsersci il %d %c voto corrisondente alla studente %s: ", i+1, 167, nome[i]); //Il numero 167 corrisponde (in codice ascii) al pallino ° che si mette per indicare l'ordine
                        scanf("%f", &voti);
                        if(i==0)
                        {                      
                             votimax=voti;
                             strcpy(mnome, nome[i]);
                        }     
                        else
                        {
                            if(voti>votimax)
                            {
                                  votimax=voti;
                                  strcpy(mnome, nome[i]);
                            }      
                        } 
        }
        printf("\nIl voto massimo e\' di %2.1f ed e\' stato fatto dallo studente di nome %s", votimax, mnome);
        printf("\n");
        system ("pause");
        return 0;
    }
    P.S. Se trovate qualcosa che non va rettificatemi subito

    Ciao
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    L'importante non è che il programma adesso funzioni ma che tu abbia capito cosa sbagliavi e che approfondisci gli argomenti su cui hai ancora forti dubbi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Si,
    grazie ai vostri aiuti sono riuscito a risolvere alcuni dei miei dubbi.
    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.